Margen redundante al agregar ImageView a ScrollView en Android

He estado intentando utilizar un ScrollView en un solo ImageView con un JPG (~ 770 x 1024) sobre un AVD que es 600×800.

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 visualizó en un centro de un ScrollView, envuelto con el área de fondo en la parte superior e inferior como sigue:

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

En lugar de simplemente

 Image| . | . | . | . : 

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

 iv.setBackgroundColor( color.Red ); 

Donde esperaría que la imagen no tomara más que su tamaño (escalado al tamaño de AVD) y espero que el ScrollView me permita desplazarme por el resto (si lo hay).

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

Por otra parte intenté agregar un LinearLayout con un maniquí opinión del texto tal como el diseño linear es un padre al ImageView y al TextView, y el ScrollView es un padre al 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 ajustó a la altura de una vista de texto sin texto (19).

 ______________________ | TITLEBAR | +--------------------+ | []<-image | | height=19px | . . . . +--------------------+ 

Es importante que evite estirar la imagen. No puedo usar FIT_XY para ScaleType. ¿Cuál es la forma recomendada de implementar una visualización de una página que se puede desplazar potencialmente? ¿Tengo que hacerlo manualmente con un diseño sencillo y desplazamiento sobre eventos GestureDetector.OnScroll ?

Gracias

Shmuel

PS: Otra observación: Con una imagen reducida a 600×780 (escala proporcional) funciona correctamente. Desafortunadamente, para mí no es factible utilizar un conjunto de clones reducidos de las imágenes.

Añadir esto a su ImageView en el xml:

 android:adjustViewBounds="true" 

He tenido que hacer algo similar, que creo que debería funcionar en su escenario, pero esto es de mi cabeza sin pruebas, por lo que YMMV:

 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é de improviso si ScrollView permite desplazamiento tanto horizontal como vertical al mismo tiempo, o si tendría que poner un HorizontalScrollView dentro de un ScrollView, o si eso es posible … pero esto DEBE obtener el correcto Tamaño de ImageView!

Si desea que la imagen llene todo el espacio que usaría ScaleType.CENTER_CROP. Esto cortará el borde izquierdo y derecho de su imagen un poco sin embargo.

Echa un vistazo a este post .

La respuesta oficial es la siguiente:

 imgPreview.setScaleType(ImageView.ScaleType.CENTER_INSIDE); imgPreview.setAdjustViewBounds(true); 
  • Cómo crear multiline edittext con vista de desplazamiento dentro de la actividad?
  • Ver dentro de ScrollView no ocupa todo el lugar
  • Custom ViewPager dentro de ObservableScrollView no se mide correctamente la altura
  • Reciclando vistas en vista de desplazamiento
  • Android WebView dentro de ScrollView solo desplaza scrollview
  • Android captura todos los eventos de movimiento y los envía a los niños
  • El teclado suave no activa el desplazamiento en un ScrollView
  • Hacer scrollbars flash de código (como iOS flashScrollIndicators)
  • Android: Dibujo sobre lienzo en Scrollview
  • Android TimePicker (Estilo de rueda) no responde correctamente a los gestos de desplazamiento dentro de ScrollView
  • Cuadrícula de imágenes dentro de ScrollView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.