2010-06-08 13 views
5

He estado tratando de usar un ScrollView en un solo ImageView con un JPG (~ 770 x 1024) sobre un AVD de 600x800.Márgenes redundantes al agregar ImageView a ScrollView en Android

Mi main.xml es:

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

Ahora, agrego un solo ImageView con

setContentView(R.layout.main); 
ScrollView sv = (ScrollView)findViewById(R.id.scroller); 
ImageView iv = new ImageView(this); 
iv.setImageDrawable(new BitmapDrawable("/sdcard/770x1024.jpg")); // same happens with ScaleDrawable. 
iv.setScaleType(ScaleType.CENTER_INSIDE); 
sv.addView(sv); // and it does not go any better if I use Linear Layout between the ScrollView and the ImageView. 

El resultado es La imagen se muestra en un medio de una ScrollView, envuelto con el fondo área en la parte superior e inferior de la siguiente manera:

 | } blank 
    | } 
Image| 
. | 
. : 
. : 
    : } blank 
    : } 
    ^-scrollbar 

En lugar de simplemente

Image| 
. | 
. | 
. | 
. : 

Traté de establecer el fondo del rojo ImageView, y se verificó que los márgenes en blanco eran de fondo ImageView.

iv.setBackgroundColor(color.Red); 

Cuando yo esperaría que la imagen de no tomar más de su tamaño (a escala en el tamaño AVD) y espero lo ScrollView que me deje Desplazarse por el resto (si lo hay).

Por alguna razón, veo que el tamaño dibujable es 600x1024.

Además He intentado añadir un LinearLayout con miras texto de relleno, tales como el diseño lineal es un padre para el ImageView y la Vista de Texto, y el ScrollView es uno de los padres a la LinearLayout.

LinearLayout dummy = new LinearLayout(this); 
dummy.addView(iv); 
TextView someTextView = new TextView(this); 
someTextView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
dummy.addView(someTextView); 
sv.addView(dummy); 

El resultado fue muy peculiar: todo el diseño se puso en la altura de un texto ver texto-less (19).

______________________ 
| T I T L E B A R | 
+--------------------+ 
|   []<-image | 
|  height=19px | 
.     . 
.     . 
+--------------------+ 

Es importante para mí evitar estirar la imagen. No puedo usar FIT_XY para ScaleType. ¿Cuál es la forma recomendada de implementar una pantalla de una página que potencialmente se puede desplazar? ¿Debo hacerlo manualmente con un diseño simple y desplazándome en GestureDetector.OnScroll eventos?

Gracias

Shmuel

P.S: Otra observación: Con una imagen a escala reducida a 600x780 (escalado proporcional) que funciona correctamente. Desafortunadamente, para mí no es factible usar un conjunto de clones reducidos de las imágenes.

Respuesta

0

Si desea que la imagen ocupe todo el espacio, utilizaría ScaleType.CENTER_CROP. Sin embargo, esto recortará un poco el borde izquierdo y derecho de su imagen.

+0

Otra Vaya ... Se recorta la izquierda y la derecha más que un poco :( que realmente quieren el ancho se comporte como FILL_PARENT, y la altura como WRAP_CONTENT, y si imageView.getHeight()> screen_height, entonces quiero que ScrollView se desplace (pero solo en los límites de la imagen ... no más que eso). En realidad, he estado haciendo un cosa rápida y muy sucia: FIT_START. La imagen se muestra en la parte superior de ScrollView y está bien a primera vista, siempre que no intente desplazarse hacia abajo, y entonces ves una gran área negra. – Meymann

0

Eche un vistazo a this post.

la respuesta oficial es la siguiente:

imgPreview.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
imgPreview.setAdjustViewBounds(true); 
1

que he tenido que hacer algo similar, que yo creo que debería funcionar en su escenario, pero esta es mi cabeza sin pruebas, por lo que tu caso es distinto:

ImageView iv = new ImageView(this); 
Drawable image = new BitmapDrawable("/sdcard/770x1024.jpg"); 
ScrollView scrollView = (ScrollView)findViewById(R.id.scroller); 

int xWidth = image.getIntrinsicWidth(); 
int yHeight = image.getIntrinsicHeight(); 

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(xWidth, yHeight); 
iv.setLayoutParams(params); 
iv.setImageDrawable(image); 
iv.setScaleType(ImageView.ScaleType.CENTER); 

scrollView.addView(iv); 

No sé si ScrollView permite o no el desplazamiento horizontal y vertical al mismo tiempo, o si tendría que poner un HorizontalScrollView dentro de un ScrollView, o si eso es posible ... pero esto DEBERÍA obtener el ImageView de tamaño correcto!

16

Agregue esto a su ImageView en el xml:

android:adjustViewBounds="true" 
+1

Tengo la misma reacción .. ¡¡GRACIAS !! – Diego

Cuestiones relacionadas