在scrollview里面显示imageview (一张超大图片), scrollview的上下显示多余的空白

     这是项目中遇到的问题: 在scrollview里面显示imageview (一张超大图片), scrollview的上下会显示空白(或者说,显示多余的空白,你需要向下拖动一会儿才能看到imageView的内容), 这个问题,仅出现在 density为120(resolution: 320X240, 400X240,432X240),160( resolution: 480X320)的机器上,而240(resolution: 800X480, 854X480)的却能正常显示,上下并没有多余的空白。

    好奇怪的问题!!!

     这样的问题,同样存在于当你在xml 中设置imageView的背景时,

   <ScrollView
      style="@style/ScrollViewStyle"
      android:layout_marginTop="85dp"
      android:layout_marginBottom="110dp">
      <ImageView
          android:id="@+id/detailView"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:src="@drawable/hayhouse"
          />
    </ScrollView>

    这样activity在显示的时候,也同样 会出现上述留白的问题!

    这个问题的解决方法是:

     不要在布局文件中设置src,改在程序中设置就没有问题了,detailView.setBackgroundResource(R.drawable.hayhouse);   

    

    但是,请注意,用这种方式来设置一张很大的图片(大约500kb)时,会出现另一个令人头疼的问题--- OOM , 前面有一篇博客,就是讲的这个问题,解决方法如下:

     Bitmap pdfImage = ReadBitmapUtil.readBitMap(this, R.drawable.more_info);
     detailView.setImageBitmap(pdfImage);

    后来,发现自己对一些东西还是没有理解.....

    新的解决方法1,在ImageView配置中加  android:adjustViewBounds="true" 就OK了!

    

Attribute Name Related Method Description
android:adjustViewBounds setAdjustViewBounds(boolean) Set this to true if you want the ImageView to adjust its bounds to preserve the aspect ratio of its drawable. 


     或者可以使用方法2:  为三种密度,分别设置图片资源,分别放在drawable-ldpi, drawable-hdpi,drawable-mdpi文件夹下,这样就可以了!

     注: BitmapFactory.decodeStream(is,null,opt);方法是直接读取字节码,它并不会根据机器的各种分辨率来自动适应。

            120像素/英寸 ( ldpi)  《===》 47.24 像素/厘米
            160像素/英寸 ( ldpi)  《===》 62.99 像素/厘米   

            240像素/英寸 (hdpi)  《===》 94.49 像素/厘米




你可能感兴趣的:(android,xml,layout,null)