tamaño studio redimensionar pantalla imagenes imagen fondo cambiar calidad boton bajar ajustar android resize imageview

redimensionar - cambiar el tamaño de un boton en android studio



Android ImageView ajusta la altura del padre y el ancho del accesorio (5)

Como mencioné en un comentario, subclasé el ImageView. Encontré mi código, aquí tienes:

protected class ResizableImageView extends ImageView { private Bitmap mBitmap; // Constructor public ResizableImageView(Context context) { super(context); } // Overriden methods @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if(mBitmap != null) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * mBitmap.getHeight() / mBitmap.getWidth(); setMeasuredDimension(width, height); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } @Override public void setImageBitmap(Bitmap bitmap) { mBitmap = bitmap; super.setImageBitmap(bitmap); } }

Actualización : resolví este problema usando el método descrito en esta respuesta

Estoy un poco atrapado con este problema, que creo que debería ser bastante simple.

Así que mi aplicación descarga una imagen y muestra el mapa de bits en un ImageView, un elemento secundario de RelativeLayout. Me gustaría que ImageView se ajuste al ancho principal y que se adapte su tamaño para mantener la relación de aspecto.

Aquí está mi XML:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:id="@+id/banner" android:layout_width="fill_parent" android:layout_height="wrap_content"></RelativeLayout> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>

Y el código:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); RelativeLayout banner = (RelativeLayout) findViewById(R.id.banner); ImageView imgV = new ImageView(this); imgV.setScaleType(ImageView.ScaleType.CENTER_CROP); // I tried all the scale types : CENTER_INSIDE : same effect, FIT_CENTER : same effect... imgV.setBackgroundColor(0x00FFFF00); imgV.setAdjustViewBounds(Color.BLUE); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); banner.addView(imgV,params); // Some code downloading the image stream bitmap = BitmapFactory.decodeStream(stream); imgV.setImageBitmap(bitmap); }

Deseado:

Resultado:


Creo que deberías cambiar tu ancho de imgV a "match_parent"

Debe cambiar el tipo de escala a imgV.setScaleType (ImageView.ScaleType.CENTER_INSIDE);


Gracias a @Julien y @js. Aquí está la solución completa de ImageView que ampliará la relación de aspecto de altura de mapa de bits conservando incluso si el mapa de bits es más pequeño que ImageView.

public class ResizableImageView extends ImageView { public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ Drawable d = getDrawable(); if(d!=null){ // ceil not round - avoid thin vertical gaps along the left/right edges int width = MeasureSpec.getSize(widthMeasureSpec); int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth()); setMeasuredDimension(width, height); }else{ super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } }

Puede usar esta clase en sus diseños xml en lugar de ImageView.

<com.example.ResizableImageView android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/banner" />


Hice un ligero cambio en la solución de @Seraphim S para tener en cuenta los casos en que la imagen puede ser amplia y los límites de la vista también amplios (por ejemplo, girar el dispositivo al modo horizontal).

public class ResizableImageView extends ImageView { public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable d = getDrawable(); if (d != null) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); if (width >= height) { width = (int) Math.ceil((float) height * (float) d.getIntrinsicWidth() / (float) d.getIntrinsicHeight()); } else { height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth()); } setMeasuredDimension(width, height); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } }


Probablemente estés buscando android:adjustViewBounds="true" en xml o imageView.setAdjustViewBounds(true) en Java.