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?
- ¿Cómo extender ImageButton correctamente?
- Base de datos de Android más rápida
- Android NumberPicker: Establecer min, max, por defecto de XML
- Nuevo en Android - Dibujo de una vista en tiempo de ejecución
- Android: Configurar la altura del botón en XML en función de su ancho
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
- Android ¿Es posible definir un mapa en un archivo XML?
- Cómo configurar un diseño de menú principal en Android?
- Android Drawable: ¿Especificar el ancho de la forma en porcentaje en el archivo XML?
- Parse cadena XML con SAX
- Xml extraer elementos del analizador xml
- Pantalla Android Parpadea en mostrar / ocultar barras del sistema
- Cómo crear un AttributeSet en Android?
- La forma más fácil de escribir y leer un XML
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:
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: ShareActionProvider sin historial
- Evitar que TextView multilínea se amplíe innecesariamente a su máximo ancho