2011-07-12 9 views
52

Me gustaría escalar una imagen para tomar el tamaño completo de una imagen. Esto es sutilmente diferente que usar scaleType=fit_center porque fit_center dejará bandas alrededor de la imagen si la relación de aspecto de la imagen no coincide exactamente con la relación de aspecto de ImageView. En cambio, me gustaría que la imagen se centre y amplíe para completar completamente la vista circundante, con cualquier exceso cortado.Escale una imagen hasta completar toda la vista de imagen en Android

soy capaz de lograr esto mediante el cálculo de mi propia matriz de la imagen personalizada durante onCreate():

final Display display = getWindowManager().getDefaultDisplay(); 
final float screenWidth = display.getWidth(); 
final float screenHeight = display.getHeight(); 
final float imageWidth = splashView.getDrawable().getIntrinsicWidth(); 
final float imageHeight = splashView.getDrawable().getIntrinsicHeight(); 
final Matrix splashMatrix = new Matrix(); 
final float scale = Math.max(screenHeight/imageHeight,screenWidth/imageWidth); 
splashMatrix.postScale(scale, scale); 
splashView.setImageMatrix(splashMatrix); 

Esto funciona bien, pero parece que tiene que haber una manera más fácil de distancia. ¿Alguien sabe de una manera de escalar una imagen en un ImageView mientras preserva la relación de aspecto de la imagen y llena por completo el ImageView?

(Nota: en mi caso mi ImageView está ocupando la pantalla completa, así que utilizo getWindowManager().getDisplay() para encontrar el tamaño de la imagen deseada no se puede utilizar splashView.getWidth()/getHeight() porque la vista no se ha presentado todavía y doesn. no tiene un tamaño)

Respuesta

116

Puede usar android:scaleType="centerCrop". Mantiene la relación de aspecto y escala la imagen tal como lo desea.

Para obtener más información, por favor pasar por el siguiente enlace

http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType

+1

¿Cómo no se me olvida que? – emmby

+2

¡No mantiene la relación de aspecto! Tengo layout_height = wrap_content, layout_width = fill_parent, y la relación de aspecto se ha ido, la imagen tiene ancho de pantalla, pero la altura es incorrecta (es demasiado corta, como el 40% de la altura que debería tener). –

+9

Acabo de solucionar el problema en mi comentario anterior: android: adjustViewBounds = "true". –

Cuestiones relacionadas