Espacio en blanco al escalar imageview en gridview

Estoy buscando implementar una interfaz de usuario similar a las tarjetas de Google Play.

He creado un GridView y el fondo de la tarjeta como un archivo xml. Ahora, estoy buscando para ajustar imágenes en la tarjeta de modo que la sombra inferior es visible, pero el ancho de la imagen es el mismo que el ancho de la tarjeta. El problema es que hay un espacio en blanco alrededor de la imagen aunque establezca el GridView.LayoutParams proporcional al tamaño de la imagen. Intenté different scaleType pero ninguno funcionó. Además, una vez que obtengo el ancho de la imagen para ajustarse al ancho de la tarjeta, ¿cómo puedo asegurarme de que la sombra del fondo todavía está visible?

Introduzca aquí la descripción de la imagen

Mi clase de adaptador de imagen

package me.zamaaan.wallpaper; import android.content.Context; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter{ private Context mContext; // Keep all Images in array public Integer[] mThumbIds = { R.drawable.background1, R.drawable.background2, R.drawable.background3, R.drawable.background4, R.drawable.background1, R.drawable.background2, R.drawable.background1, R.drawable.background2, R.drawable.background3, R.drawable.background4, R.drawable.background1, R.drawable.background2, R.drawable.background3 }; // Constructor public ImageAdapter(Context c){ mContext = c; } @Override public int getCount() { // TODO Auto-generated method stub return mThumbIds.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mThumbIds[position]; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(mContext); imageView.setImageResource(mThumbIds[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); int width_dp = 109; double height_dp = width_dp/0.5625; int width_px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width_dp, mContext.getResources().getDisplayMetrics()); int height_px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (int)height_dp, mContext.getResources().getDisplayMetrics()); imageView.setLayoutParams(new GridView.LayoutParams(width_px, height_px)); imageView.setBackgroundResource(R.drawable.bg_card); return imageView; } } 

Bg_card.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" android:dither="true"> <corners android:radius="2dp"/> <solid android:color="#ccc" /> </shape> </item> <item android:bottom="2dp"> <shape android:shape="rectangle" android:dither="true"> <corners android:radius="2dp" /> <solid android:color="@android:color/white" /> <padding android:bottom="8dp" android:left="8dp" android:right="8dp" android:top="8dp" /> </shape> </item> </layer-list> 

Gridview.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/landscape" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="#eeeeee" android:gravity="center"> <GridView android:id="@+id/grid_view" android:layout_marginTop="16.50dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="3" android:paddingBottom="8dp" android:horizontalSpacing="11dp" android:verticalSpacing="7dp" android:gravity="center" android:stretchMode="columnWidth" > </GridView> </RelativeLayout> 

El tamaño real de las imágenes es

 720x1280px 

Sus imágenes no llenan la tarjeta porque en su fondo de la tarjeta usted tiene un relleno de 8dp en cualquier lado

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> ... <item android:bottom="2dp"> <shape android:shape="rectangle" android:dither="true"> <corners android:radius="2dp" /> <solid android:color="@android:color/white" /> <padding android:bottom="8dp" android:left="8dp" android:right="8dp" android:top="8dp" /> </shape> </item> </layer-list> 

Retire el relleno para que llene el ancho.

Si desea mantener la sombra también, sería mejor crear un 9-parche para su fondo para que pueda definir dónde se encuentra el contenido, algo así como:

Introduzca aquí la descripción de la imagen

Las líneas negras en la parte izquierda y superior representan las áreas escalables y las líneas en la parte inferior y derecha representan las áreas donde se encuentra el contenido (observe que el área de contenido en el lado derecho no cubre el área de sombra).

  • Android: DOM vs SAX vs análisis XMLPullParser?
  • Eclipse falta las fichas de diseño gráfico y de origen al editar archivos XML de Android
  • Cómo llamar a strings.xml en arraylist
  • Android crea y escribe xml en un archivo
  • Múltiples animaciones en 1 imageview android
  • Cambiar entre previsualización de referencia y valor de recursos de cadena en el editor xml
  • Cómo aumentar el tamaño de transport.dump de 256 bytes a 512 o más bytes en KSOAP2?
  • Cómo cambiar la dirección de la sombra de elevación de Android?
  • Cómo especificar la carpeta lib para JARs cuando se utiliza un archivo de generación de hormigas generado por Android?
  • Definición del estilo de origen XML de Gradient / Shape / Corners
  • Android XmlPullParser UTF-8 problema
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.