2010-06-08 3 views
5

Я пытаюсь использовать ScrollView на одном ImageView с JPG (~ 770 x 1024) по AVD, который составляет 600x800.Резервные поля при добавлении ImageView в ScrollView в Android

Мой 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 red, и он подтвердил, что пустые поля были фоном ImageView.

iv.setBackgroundColor(color.Red); 

Где бы ожидать, что изображение не принимать не более, чем его размер (масштабируются до размера АВД) и я ожидаю, что 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 (пропорционального масштабирования) он работает должным образом. К сожалению, для меня нецелесообразно использовать набор уменьшенных клонов изображений.

ответ

0

Если вы хотите, чтобы изображение заполнило все пространство, я бы использовал ScaleType.CENTER_CROP. Однако это уменьшит левый и правый края вашего изображения.

+0

Другой упс ... Он обрезает левый и право более чем немного :( я на самом деле хотите, чтобы ширина вести себя как FILL_PARENT, и высоту, подобную WRAP_CONTENT, и если imageView.getHeight()> screen_height, то я хочу, чтобы ScrollView прокручивал (но только в границах изображения ... не более того). На самом деле, я делаю Быстрая и очень грязная вещь: FIT_START. Изображение отображается поверх ScrollView, и на первый взгляд это нормально, если вы не пытаетесь прокрутить вниз - и то вы видите большую черную область. – Meymann

0

Посмотрите на this post.

официальный ответ:

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

Я должен был сделать что-то подобное, что я считаю, должен работать в вашем сценарии, но это от моей головы, без тестирования, так 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); 

Я не знаю, из-за того, что ScrollView позволяет одновременно выполнять горизонтальную и вертикальную прокрутку, или вам нужно будет поместить HorizontalScrollView в ScrollView, или если это возможно ... но это СЛЕДУЕТ получить правильный размер ImageView!

16

Добавьте это в ImageView в XML:

android:adjustViewBounds="true" 
+1

У меня такая же реакция .. СПАСИБО !! – Diego

Смежные вопросы