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:

  • Android: NoClassDefFoundError android.os.AsyncTask
  • Integrar MuPDF Reader en una aplicación
  • Cómo solucionar java.lang.OutOfMemoryError: Límite de sobrecarga de GC excedido error en android studio
  • Android Studio: No se pudo encontrar: 'com.android.support:support-v4:19.1.0'
  • ¿Cómo cambiar el tema predeterminado de la aplicación a un tema de aplicación diferente?
  • CursorLoader, obtiene URI para la base de datos local
  • <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?

  • TextWatcher para más de un EditText
  • Android - Configuración de TextView a negrita no funciona
  • OnSaveInstanceState no está guardando mis valores (onCreate input El paquete siempre es nulo)
  • El sensor del acelerómetro causa pérdidas en un servicio
  • Android: Edittext con centro de gravedad que no funciona en el dispositivo
  • Alinear ProgressBar horizontal a la parte superior (quitar hueco)
  • 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.