在Android中将ImageView添加到ScrollView时的冗余边距

时间:2010-06-08 08:50:45

标签: android imageview scrollview

我一直试图在单个ImageView上使用ScrollView,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(比例缩放),它确实可以正常工作。不幸的是,对我来说,使用一组缩小的图像克隆是不可行的。

4 个答案:

答案 0 :(得分:16)

将其添加到xml中的ImageView:

android:adjustViewBounds="true"

答案 1 :(得分: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是否同时允许水平和垂直滚动,或者你是否必须在ScrollView中放置Horizo​​ntalScrollView,或者甚至可能......但是这应该得到你是正确尺寸的ImageView!

答案 2 :(得分:0)

如果你想让图像填满整个空间,我会使用ScaleType.CENTER_CROP。这会稍微裁剪图像的左右边缘。

答案 3 :(得分:0)

查看this post

官方答案是:

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