setscaletype - imageview android size
¿La imagen de Android no respeta maxWidth? (2)
Ah,
android:adjustViewBounds="true"
se requiere para que funcione maxWidth.
Funciona ahora!
Entonces, tengo una vista de imagen que debe mostrar una imagen arbitraria, una imagen de perfil descargada de Internet. Quiero que este sea el ImageView para escalar su imagen para que quepa dentro de la altura del contenedor principal, y un ancho máximo establecido de 60dip. Sin embargo, si la imagen es alta en relación a la relación, y no necesita 60 ppp de ancho, el ancho de ImageView debe disminuir para que el fondo de la vista quede ajustado alrededor de la imagen.
Intenté esto,
<ImageView android:id="@+id/menu_profile_picture"
android:layout_width="wrap_content"
android:maxWidth="60dip"
android:layout_height="fill_parent"
android:layout_marginLeft="2dip"
android:padding="4dip"
android:scaleType="centerInside"
android:background="@drawable/menubar_button"
android:layout_centerVertical="true"/>
pero eso hizo que el ImageView fuera súper grande por alguna razón, tal vez usó el ancho intrínseco de la imagen y wrap_content para establecerlo; de todos modos, no respetó mi atributo maxWidth ... ¿Eso solo funciona dentro de algunos tipos de contenedores? Está en LinearLayout ...
¿Alguna sugerencia?
Establecer adjustViewBounds
no ayuda si usa match_parent
, pero la solución es simple ImageView
personalizado:
public class LimitedWidthImageView extends ImageView {
public LimitedWidthImageView(Context context) {
super(context);
}
public LimitedWidthImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LimitedWidthImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int specWidth = MeasureSpec.getSize(widthMeasureSpec);
int maxWidth = getMaxWidth();
if (specWidth > maxWidth) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth,
MeasureSpec.getMode(widthMeasureSpec));
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}