Tengo una GridView
. Los datos deGridView
es solicitud de un servidor.
Aquí está el diseño del artículo en GridView
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/analysis_micon_bg"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="@dimen/half_activity_vertical_margin"
android:paddingLeft="@dimen/half_activity_horizontal_margin"
android:paddingRight="@dimen/half_activity_horizontal_margin"
android:paddingTop="@dimen/half_activity_vertical_margin" >
<ImageView
android:id="@+id/ranking_prod_pic"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/ranking_rank_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/ranking_prod_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/ranking_prod_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Solicito datos del servidor, obtengo la URL de la imagen y cargo la imagen en Bitmap
public static Bitmap loadBitmapFromInputStream(InputStream is) {
return BitmapFactory.decodeStream(is);
}
public static Bitmap loadBitmapFromHttpUrl(String url) {
try {
return loadBitmapFromInputStream((InputStream) (new URL(url).getContent()));
} catch (Exception e) {
Log.e(TAG, e.getMessage());
return null;
}
}
y hay un código de getView(int position, View convertView, ViewGroup parent)
método en el adaptador
Bitmap bitmap = BitmapUtil.loadBitmapFromHttpUrl(product.getHttpUrl());
prodImg.setImageBitmap(bitmap);
El tamaño de la imagen es 210*210
. Ejecuto mi aplicación en mi Nexus 4. La imagen llena el ImageView
ancho, pero la ImageView
altura no escala. ImageView
No muestra toda la imagen.
¿Cómo resuelvo este problema?
fill_parent
para el ancho es solo una buena práctica, un tamaño fijo también funciona.Me gusta la respuesta de arnefm pero cometió un pequeño error (ver comentarios) que intentaré corregir:
Por lo tanto
ImageView
, se escalará correctamente y no tendrá problemas de dimensión si (por ejemplo) se coloca dentro deScrollView
fuente
there
es un enlaceTuve un problema similar una vez. Lo resolví haciendo un ImageView personalizado.
Luego anule el método onMeasure de la vista de imagen. Hice algo como esto, creo:
Esto estirará la imagen para que se ajuste a la pantalla mientras se mantiene la relación de aspecto.
fuente
android:layout_height="wrap_content"
. En este casoMeasureSpec.getSize(heightMeasureSpec)
será0
y suviewSideRatio
resultado seráInfinity
(no hay que preguntarse, Java float permite tales valores). En este caso, tanto suheight
comowidth
será0
.Uso
android:scaleType="centerCrop"
.fuente
Hice algo similar a lo anterior y luego me golpeé la cabeza contra la pared durante unas horas porque no funcionaba dentro de a
RelativeLayout
. Terminé con el siguiente código:Y luego, para evitar
RelativeLayout
ignorar la dimensión medida, hice esto:fuente
Use estas propiedades en ImageView para mantener la relación de aspecto:
fuente
Esto no será aplicable si configura la imagen como fondo en ImageView, debe establecerla en src (android: src).
Gracias.
fuente
Para crear una imagen con un ancho igual al ancho de la pantalla y una altura establecida proporcionalmente según la relación de aspecto, haga lo siguiente.
Espero que esto ayude.
fuente
Prueba esto: me resolvió el problema
fuente
No necesitas ningún código java. Sólo tienes que :
La clave está en el elemento primario coincidente para ancho y alto
fuente
intente con esta línea simple ... agregue esta línea en su código xml en la etiqueta de vista de imagen sin agregar ninguna dependencia android: scaleType = "fitXY"
fuente
use android: ScaleType = "fitXY" im ImageView xml
fuente
Puede intentar hacer lo que está haciendo cargando manualmente las imágenes, pero le recomiendo que eche un vistazo a Universal Image Loader .
Recientemente lo integré en mi proyecto y tengo que decir que es fantástico. Hace toda la preocupación por hacer las cosas asíncronas, cambiar el tamaño y almacenar en caché las imágenes para usted. Es realmente fácil de integrar y configurar. En 5 minutos, probablemente pueda hacer lo que quiera.
Código de ejemplo:
Esto puede cargar de forma diferida las imágenes, ajustarlas correctamente al tamaño de imageView que muestra una imagen de marcador de posición mientras se carga, y muestra un icono predeterminado si falla la carga y almacena en caché los recursos.
- También debo agregar que esta configuración actual mantiene la relación de aspecto de la imagen, por lo tanto, aplicable a su pregunta original
fuente
Simplemente use UniversalImageLoader y establezca
y sin configuraciones de escala en ImageView
fuente
Tuve un problema similar, encontré que la razón de esto es porque necesita calcular el
dp
. Android Studio está calculando elImageView
cuando se carga desde eldrawable
, pero cuando se utiliza otro método, como la carga de mapa de bits de ladp
que no se contabiliza automáticamente,Aquí está mi xml
Estoy usando Kotlin, y cargando extraíble de un archivo de activos, así es como calculo esto
fuente
Use picasso que es fácil de usar.
En su adaptador ..
http://square.github.io/picasso/
fuente