2012-01-03 13 views
15

tengo este sencillo diseño XML y un archivo que es green_square.png píxeles 30X30la escala de una imagen a la anchura disponible máximo, manteniendo la relación de aspecto y evitar ImageView espacio adicional

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:background="@color/red" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:adjustViewBounds="true" 
     android:scaleType="fitStart" 
     android:src="@drawable/green_square"/> 

</LinearLayout> 

Lo que estoy tratando de lograr está escalando la imagen para llenar el ancho principal, manteniendo su relación de aspecto sin espacio adicional de ImageView.

He añadido un fondo rojo al ImageView solo como referencia del espacio adicional que quiero evitar.

Here is my goal

+4

Try 'android: adjustViewBounds = "true"' – sebataz

+0

Gracias, eso es lo que pensé, pero es ya allí –

+0

Parece que este problema se molesta a muchos usuarios, echa un vistazo a este enlace http: // grupos. google.com/group/android-developers/browse_thread/thread/89d21a582ebc5b21 –

Respuesta

-1

Uso tipo de escala "fitCenter" o "fitxy"

+1

Gracias por la respuesta, sin embargo, fitCenter solo centra la vista dejando el los márgenes en la parte superior e inferior en lugar de solo en la parte inferior (si usa fitStart) y fitXY hace que la imagen pierda su relación. –

+0

alguna otra idea? –

+0

puede establecer la imagen de mapa de bits en código en lugar de xml creando a través de Bitmapfactory, pero no se puede ajustar la imagen de 30X30 píxeles en pantalla completa sin perder su relación de aspecto. Utilice BitmapFactoey para crear una imagen de mapa de bits y luego cree una imagen de escala desde la función Crear mapa de bits que le ayudará a ... http://developer.android.com/reference/android/graphics/Bitmap.html y http://developer.android .com/reference/android/graphics/BitmapFactory.html – loks

-4

Prueba esto,

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/red" 
    android:scaleType="centerCrop" 
    android:src="@drawable/green_square" /> 

</LinearLayout> 
+0

Gracias por la sugerencia, sin embargo, este diseño ocupa toda la vista. Esto es lo que me gusta lograr https://lh6.googleusercontent.com/-0UaWzbAvVkA/TwLdxtHZx6I/AAAAAAAAByA/YQh5Ein-2Fs/w500-h423-k/screen-shot.jpg –

+0

Vota abajo debido a la falta de una descripción adecuada. Es solo un trozo de código, no una respuesta. –

+0

@King RV - alguna idea? –

0

En mi opinión, esto ImageView diseño extra es un error. Me sucedió lo mismo. Como resultado, el texto que quería seguir el green_square siguió el diseño adicional. Entonces, lo que hice fue especificar el texto relativo a la parte inferior de la pantalla. De esa forma, el texto revisará el diseño adicional. Lo admito, no fue la mejor solución, pero parece mucho mejor que tener un gran espacio entre el green_square y el texto.

31
<ImageView 
     android:id="@+id/game" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:scaleType="centerCrop" 
     android:adjustViewBounds="true" 
     android:src="@drawable/ic_game" 
     /> 

esto funciona para mí. Ancho total de los cultivos primario y central para mantener la relación de aspecto

+2

funcionó para mí. Debe ser la solución aceptada. ¡Gracias! –

+3

'centerCrop' extiende la imagen al ancho completo, pero es probable que recorte la parte superior e inferior, ya que _view_ mantiene la altura original fija, pero la relación de aspecto de la imagen se mantiene para que no quede aplastada o estirada. 'adjustViewBounds' permite que crezca la altura para evitar el recorte real y hacer que _view_ también mantenga la relación de aspecto de la imagen. Usados ​​en conjunto, hacen lo que se necesita para el OP. – lilbyrdie

+0

sustituyendo 'centerCrop' por' fitXY' No noto ninguna diferencia. ¿Qué diferencia hay? –

0

Es muy simple. Simplemente haz el ancho fill_parent y height wrap_content. Aquí está el que descubrí.

<ImageView 
    android:id="@+id/game" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:scaleType="centerCrop" 
    android:adjustViewBounds="true" 
    android:src="@drawable/ic_game" 
    /> 
Cuestiones relacionadas