Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo establecer el tamaño mínimo y máximo de un ImageView en Android

Me gustaría especificar tanto min. Anchura / altura y máx. Anchura / altura para un ImageView. La imagen debe ser escalada para ajustarse.

Haciendo esto:

  • SQLite Base de datos "contexto" pasó a adaptador
  • Obtener todos los TableRow en un TableLayout
  • NotifyDataSetChange no funciona desde un adaptador personalizado
  • ¿Cómo comprobar si un dispositivo en particular soporta redes 4G en Android?
  • Lectura de PDF desde una aplicación de Android
  • Autenticación de Android con Google OpenID. ¿Qué sigue?
  • <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="100dp" android:maxWidth="200dp" android:minHeight="100dp" android:maxHeight="200dp" android:src="@drawable/ic_launcher" /> 

    ellos en. Anchura y altura funcionan como deberían, pero max. Ancho y alto se ignoran.

    Si establezco android: adjustViewBounds = "true":

     <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitCenter" android:minWidth="100dp" android:maxWidth="200dp" android:minHeight="100dp" android:maxHeight="200dp" android:src="@drawable/ic_launcher" /> 

    Que, el valor máx. Anchura y altura funcionan como deberían, pero mín. Ancho y alto se ignoran.

    ¿Hay una manera de tener ambos?

  • ¿Dónde está getChildFragmentManager en la biblioteca de soporte v13?
  • Import android.R en Eclipse: ¿Por qué?
  • ¿Dónde registra bugs para Android / iOS Productos o servicios de Google (AppInvites, Maps, etc ...)?
  • ¿Cómo obtengo IP_ADDRESS en formato IPV4?
  • Android Volley ImageLoader - BitmapLruCache parámetro?
  • Android volver a la primera pantalla
  • 2 Solutions collect form web for “Cómo establecer el tamaño mínimo y máximo de un ImageView en Android”

    Al final, creé mi propia vista que extiende ImageView y sobrescribe onMeasure ():

     public class ResizingImageView extends ImageView { private int mMaxWidth; private int mMaxHeight; public ResizingImageView(Context context) { super(context); } public ResizingImageView(Context context, AttributeSet attrs) { super(context, attrs); } public ResizingImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setMaxWidth(int maxWidth) { super.setMaxWidth(maxWidth); mMaxWidth = maxWidth; } @Override public void setMaxHeight(int maxHeight) { super.setMaxHeight(maxHeight); mMaxHeight = maxHeight; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); Drawable drawable = getDrawable(); if (drawable != null) { int wMode = MeasureSpec.getMode(widthMeasureSpec); int hMode = MeasureSpec.getMode(heightMeasureSpec); if (wMode == MeasureSpec.EXACTLY || hMode == MeasureSpec.EXACTLY) { return; } // Calculate the most appropriate size for the view. Take into // account minWidth, minHeight, maxWith, maxHeigh and allowed size // for the view. int maxWidth = wMode == MeasureSpec.AT_MOST ? Math.min(MeasureSpec.getSize(widthMeasureSpec), mMaxWidth) : mMaxWidth; int maxHeight = hMode == MeasureSpec.AT_MOST ? Math.min(MeasureSpec.getSize(heightMeasureSpec), mMaxHeight) : mMaxHeight; int dWidth = Helpers.dipsToPixels(drawable.getIntrinsicWidth()); int dHeight = Helpers.dipsToPixels(drawable.getIntrinsicHeight()); float ratio = ((float) dWidth) / dHeight; int width = Math.min(Math.max(dWidth, getSuggestedMinimumWidth()), maxWidth); int height = (int) (width / ratio); height = Math.min(Math.max(height, getSuggestedMinimumHeight()), maxHeight); width = (int) (height * ratio); if (width > maxWidth) { width = maxWidth; height = (int) (width / ratio); } setMeasuredDimension(width, height); } } } 

    Esta vista ahora se puede utilizar como:

     <my.package.ResizingImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="100dp" android:maxWidth="200dp" android:minHeight="100dp" android:maxHeight="200dp" android:src="@drawable/ic_launcher" /> 

    Esto funciona como yo quería, pero no debería haber una solución más fácil?

      <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:minWidth="150dp" android:minHeight="150dp" > <RelativeLayout android:id="@+id/imageLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" android:layout_gravity="center_vertical" > <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:src="@drawable/trump" /> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="gone" /> </RelativeLayout> </LinearLayout> 

    Consulte Detería altura y ancho mínimo al diseño del contenedor y coloque adjustViewBounds en Imageview. De esta manera su tarea se completará en pasos simples.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.