2011-01-25 17 views
5

Estoy tratando de implementar un ImageView con podría contener imágenes horizontales o verticales. Esas imágenes deben ajustarse al ancho de la vista de la imagen (si es horizontal) o la altura (si es vertical) pero en cualquier caso deben estar alineadas a la parte superior de la vista sin margen o relleno.Android ImageView ScaleType * FIT_TOP *

Lo que me gustaría lograr es algo así como android:scaleType="fitStart" pero centrado en el caso de imágenes de retrato o alineado a la parte superior en el caso de imágenes de paisaje.

Agregado:

Ahora estoy usando un código tan fea, que parece funcionar, pero no estoy seguro que es la mejor solución:

<com.custom.layout.MyImageView 
     android:id="@+id/detail_view_image" 
     android:src="@drawable/logo" 
     android:background="#fff" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:cropToPadding="false" 
     android:adjustViewBounds="false" 
/> 

y luego en mi clase, que se extiende ImageView i hacer:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int imgWidth = getDrawable().getIntrinsicWidth(); 
     int imgHeight = getDrawable().getIntrinsicHeight(); 

     if(imgWidth>imgHeight) 
      setScaleType(ScaleType.FIT_START); 
     else 
      setScaleType(ScaleType.FIT_CENTER); 

     int width = measureWidth(widthMeasureSpec); 
     int height = measureHeight(heightMeasureSpec);  

     setMeasuredDimension(width, height); 
    } 
+0

Estoy buscando hacer algo similar, ¿alguna vez has encontrado una solución para esto? –

+0

sin suerte hasta ahora, terminé usando el código que publiqué arriba ... – 0m4r

+1

ok, gracias por el código! –

Respuesta

2

en lugar de puntos de vista nativos primordiales que sólo podría introducir un fragmento en el método que cambia el ScaleType del ImageView onCreate() de acuerdo con la orientación del teléfono .

Algunos fragmento de ejemplo (no estoy seguro de que funciona al igual que pero para obtener la idea), en el método onCreate:

ImageView imgView = findViewById(R.id.myImage); 
//portrairt orientation 
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    imgView.setScaleType(ScaleType.FIT_CENTER); 
} else { //landscape orientation 
    imgView.setScaleType(ScaleType.FIT_START); 
} 

por lo que cuando un cambio de orientación que está pasando entonces el onCreate se llamará de nuevo y cambie el tipo de escala de la vista y si está anulando enConfigurationChanged(), debe agregar el fragmento de arriba nuevamente donde desee. Pruébalo y avísame si funcionó

+0

¿Confirmación? ¿discusión? – 10s

Cuestiones relacionadas