5

600x800 の AVD で JPG (~770 x 1024) を持つ単一の ImageView で ScrollView を使用しようとしています。

私の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で残り(ある場合)をスクロールできるようにすることを期待しています。

なんらかの理由で、drawable のサイズが 600x1024 になっていることがわかりました。

さらに 、線形レイアウトが ImageView と TextView の親であり、ScrollView が LinearLayout の親であるなどのダミー テキスト ビューを使用して 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 |
.                    .
.                    .
+--------------------+ 

画像を引き延ばさないようにすることが重要です。ScaleType に FIT_XY を使用できません。スクロールされる可能性のあるページの表示を実装するための推奨される方法は何ですか? 単純なレイアウトとGestureDetector.OnScrollイベントでのスクロールで手動で行う必要がありますか?

ありがとう

シュムエル

PS: 別の観察: 600x780 (比例スケーリング) に縮小された画像では、正しく機能します。残念ながら、縮小された一連の画像のクローンを使用することは現実的ではありません。

4

4 に答える 4

16

これを xml の ImageView に追加します。

android:adjustViewBounds="true"
于 2012-03-22T16:23:10.090 に答える
0

画像でスペース全体を埋めたい場合は、ScaleType.CENTER_CROP を使用します。ただし、これにより、画像の左端と右端が少しトリミングされます。

于 2010-06-08T11:36:35.773 に答える
0

この投稿をご覧ください。

公式の答えはこれです:

imgPreview.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imgPreview.setAdjustViewBounds(true);
于 2011-04-21T15:28:10.213 に答える