Cómo mantener la relación de aspecto de la imagen si imageview se extiende primero para rellenar padre
Quiero estirar la imagen para rellenar el ancho y ajustar la altura de acuerdo al ancho y mantener la relación de aspecto. Quiero que debe cubrir todo el ancho (fillparent) y la altura de la imagen debe ajustarse como de manera que la relación de aspecto se mantiene.
Intenté fit_xy pero no trabajando en mi caso. por favor, ayúdame
- Estiramiento de la imagen para adaptarse
- Tome la foto con la intención de la cámara y la pantalla en imageView o textView?
- ¿Cómo puedo alinear una imagen dentro de un ImageView a la parte inferior del ImageView?
- Obtenga la imagen del recurso por nombre en el adaptador de cursor personalizado
- Quiero una imagen dentro de SimpleAdapter?
- Saltar ImageView mientras arrastra. Los valores de getX () y getY () saltan
- Android - Crossfade mutiple imágenes en un ImageView
- ¿Cómo anular los elementos definidos en un proyecto de biblioteca de Android?
- ¿Cómo puedo usar View pager con touchimageview?
- Establecer bitmap al fondo de ImageView con el método imageView.setImageBitmap
- Correspondencia entre las coordenadas de ImageView y Pixeles de mapa de bits - Android
- Android alinea la imagen en la parte superior y central en RelativeLayout
- Control deslizante de imagen y vídeo en Android
Hay dos posibles soluciones incluso si se establece el tipo de escala fit_xy
1) De forma predeterminada, Android escalará su imagen para ajustarse al ImageView, manteniendo la relación de aspecto. Sin embargo, asegúrese de que está configurando la imagen en ImageView con android:src="..."
lugar de android:background="..."
. src=
hace que la escala de la imagen mantenga la relación de aspecto, pero background=
hace que la escala y distorsionar la imagen para que se ajuste exactamente al tamaño de la ImageView. (Sin embargo, puede utilizar un fondo y una fuente al mismo tiempo, lo cual puede resultar útil para cosas como mostrar un fotograma alrededor de la imagen principal, utilizando sólo un ImageView).
2) También debería ver android:adjustViewBounds
para hacer que ImageView android:adjustViewBounds
su tamaño para ajustarse a la imagen redimensionada. Por ejemplo, si tiene una imagen rectangular en lo que normalmente sería un cuadrado ImageView, adjustViewBounds = true hará que redimensione el ImageView para ser rectangular también. Esto afecta a cómo se establecen otras vistas en torno a ImageView.
Puede cambiar la forma en que las imágenes de escalas predeterminadas utilizan el parámetro android:scaleType
. Por cierto, la manera más fácil de descubrir cómo funciona esto simplemente habría sido experimentar un poco a ti mismo! Sólo recuerde mirar los diseños en el emulador en sí (o un teléfono real) como la vista previa en Eclipse suele ser errónea.
No estoy seguro de cuando la característica que utilizo se agregó al SDK de Android, pero hay una solución sencilla que hace exactamente lo que el OP está buscando:
Como era de esperar, configure el diseño: ancho y diseño: height to fill_parent.
Como otro respondedor mencionado correctamente, use src para encontrar su imagen, no de fondo.
Sin embargo, en lugar de intentar scaleType de fit_xy (que encuentra el lado más estrecho para encajar en la vista en lugar del lado más largo), use scaleType de centerCrop.
CentreCrop se centrará y rellenará la ventana gráfica mientras mantiene la relación de aspecto.
¡Espero que esto ayude! Lo usé para la superposición de carga webView de una aplicación comercial que desarrollé para mi actual empleador.
Copiar / pegar solución: en el archivo XML de su actividad, añada las siguientes líneas:
<ImageView android:id="@+id/logo" android:layout_width="wrap_content" android:layout_height="fill_parent" android:scaleType="centerCrop" android:src="@drawable/your_image_name" />
Hay dos maneras de hacer esto: Primero encuentre la altura y el ancho de la pantalla y llame a este método
private void scaleImage(int displayWidth) { // Get the ImageView and its bitmap width=displayWidth; Drawable drawing = holder.imagepost.getDrawable(); { Bitmap bitmap = ((BitmapDrawable) drawing).getBitmap(); int bounding = dpToPx(width); // Determine how much to scale: the dimension requiring less // scaling is // closer to the its side. This way the image always stays // inside your // bounding box AND either x/y axis touches it. float xScale = ((float) bounding) / width; float yScale = ((float) bounding) / height; float scale = (xScale <= yScale) ? xScale : yScale; // Create a matrix for the scaling and add the scaling data Matrix matrix = new Matrix(); matrix.postScale(scale, scale); // Create a new bitmap and convert it to a format understood by // the ImageView Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); width = scaledBitmap.getWidth(); // re-use height = scaledBitmap.getHeight(); // re-use BitmapDrawable result = new BitmapDrawable(scaledBitmap); // Apply the scaled bitmap holder.imagepost.setImageDrawable(result); // Now change ImageView's dimensions to match the scaled image LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.imagepost .getLayoutParams(); params.width = width; params.height = height; holder.imagepost.setLayoutParams(params); } } private int dpToPx(int dp) { float density = context.getResources().getDisplayMetrics().density; return Math.round((float) dp * density); }
O la mejor manera que conozco es usar Android Query
Aquí está el enlace http://code.google.com/p/android-query/ y se puede descargar desde allí mismo. Identifica el código para mantener la relación de aspecto
aq.id(R.id.imageView) .image(imageString, true, true, displaywidth, 0, null, AQuery.FADE_IN, AQuery.RATIO_PRESERVE);
Debajo de la solución está trabajando muy bien para mí.
Utilice la opción AQuery Libray "AQuery.RATIO_PRESERVE" para preservar la relación de aspecto:
aq.id(R.id.imgView).progress(R.id.imgPb).image(url, true, true,150, 0,null,AQuery.FADE_IN,AQuery.RATIO_PRESERVE);
Utilice los ajustes siguientes para ImageView:
<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY"/>
Utilice la configuración siguiente para las columnas de GridView automáticas:
<GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridView" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="auto_fit" android:columnWidth="150dp"/>
- Utilidades de Google Maps IconGenerator estilos de texto y fondo
- ¿Cómo establecer el AIRPLANE_MODE_ON en "True" o ON?