2010-11-16 12 views
14

Tengo un ImageView que siempre quiero que sea del mismo tamaño. Si la imagen es más pequeña que la vista, me gustaría que esté centrada en la vista. Si la imagen es más grande que la vista, me gustaría que se redujera, con la relación de aspecto preservada.ImageView que es un tamaño fijo, independientemente del tamaño de la imagen

he tenido varios intentos en este mismo - la última de las cuales es:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ImageView android:id="@+id/itemImage" android:layout_width="100dp" 
      android:layout_height="100dp" android:scaleType="fitCenter" 
      android:adjustViewBounds="true" android:gravity="center" android:padding="10px" /> 
    <TextView android:id="@+id/currentLentItem" android:layout_width="wrap_content" 
       android:layout_height="wrap_content" android:padding="10px"/> 
</LinearLayout> 

Qué me estoy perdiendo aquí?

+0

¿Obtuviste una solución satisfactoria para esto? – nwaltham

Respuesta

11

intente utilizar el tipo de escala centerInside, como a continuación:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     > 
    <ImageView 
     android:id="@+id/itemImage" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_alignParentRight="true" 
     android:scaleType="centerInside" 
     android:gravity="right|center_vertical" 
     android:padding="10px" 
     /> 
    <TextView 
     android:id="@+id/currentLentItem" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@id/list_image" 
     android:padding="10px" 
     /> 
</RelativeLayout> 

Esto hará que la imagen de bajar sólo si más grande que el diseño, y será una escala parcial, así (mientras que fitXY escalas sin tener en cuenta los aspectos proporción). También centrará la imagen si es más pequeña.

EDITAR: He actualizado el ejemplo para algo como lo que usted quiere. Aquí está la esencia de lo que cambió:

• La gravedad de ImageView cambió a right|center_vertical. Dado que desea que se alineen a la derecha, usar esta gravedad lo permitirá incluso si son imágenes de orientación vertical.

• ImageView alineado a la derecha de la RelativeLayout

• RelativeLayout establece en wrap_content ya que es para ser utilizado para un ListView.

• Se agregó TextView, alineado a la izquierda de los padres, con su borde derecho definido por el borde izquierdo de itemImage.

+0

Gracias por eso, se ve mejor. Sin embargo, la Vista todavía no parece tener un tamaño fijo. Como puede ver en mi ejemplo anterior, ImageView está al lado de un TextView, y esto se muestra en un ListView. Quiero que el borde derecho de ImageViews se alinee entre sí para que todo se vea limpio y uniforme ... –

+0

Paul, he agregado un ejemplo actualizado que puedes probar; esto debería acercarte más a lo que estás buscando. – kcoppock

+0

Gracias. Sin embargo, las ImageViews aún no son del mismo tamaño. Necesito que todos tengan exactamente el mismo ancho. Hubiera pensado que establecer layout_width haría esto, pero obviamente no ... –

10

Si la imagen es más grande que la vista, entonces se podría escalar usando:

android:scaleType="fitXY" 

que no le dará lo que quieren si la imagen es más pequeña. Quizás puedas detectar eso en tiempo de ejecución y cambiar el scaleType programáticamente.

+0

¿Hay alguna manera de "golpear" estos hilos ...? –

+0

cómo cambiarlo en tiempo de ejecución? –

+0

imageView.setScaleType (ScaleType.FIT_XY); –

Cuestiones relacionadas