Я пытался использовать ScrollView для одного ImageView с JPG (~ 770 x 1024) через AVD, который составляет 600x800.
Мой main.xml:
<?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>
Теперь я добавляю один ImageView с
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.
Результат
Изображение отображалось в середине ScrollView, обернутого фоновой областью сверху и снизу, как показано ниже:
| } blank
| }
Image|
. |
. :
. :
: } blank
: }
^-scrollbar
Вместо
Image|
. |
. |
. |
. :
Я попытался установить красный цвет фона ImageView, и он подтвердил, что пустые поля были фоном ImageView.
iv.setBackgroundColor( color.Red );
Там, где я ожидаю, что изображение будет занимать не более его размера (масштабируется до размера AVD), и я ожидаю, что ScrollView позволит мне прокручивать оставшуюся часть (если есть).
Почему-то я вижу, что размер рисования составляет 600x1024.
Более того
Я попытался добавить LinearLayout с использованием фиктивного текстового представления, например, линейный макет является родительским для ImageView и TextView, а ScrollView является родительским для 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 );
Результат был очень своеобразным:
Весь макет был установлен в виде высоты текста (19).
______________________
| T I T L E B A R |
+--------------------+
| []<-image |
| height=19px |
. .
. .
+--------------------+
Мне важно не растягивать изображение. Я не могу использовать FIT_XY для ScaleType.
Каков рекомендуемый способ реализации отображения страницы, которую можно прокручивать?
Нужно ли делать это вручную с простой компоновкой и прокруткой при GestureDetector.OnScroll событиях?
Спасибо
Шмуэль
P.S: Еще одно наблюдение: при уменьшении изображения до 600x780 (пропорциональное масштабирование) оно работает правильно. К сожалению, для меня нецелесообразно использовать набор уменьшенных клонов изображений.