为什么imageview的宽度和高度小于drawable的宽度和高度?

时间:2013-11-17 09:52:49

标签: android android-imageview

当我遇到问题时,我正在测试ImageView的功能。   我的图像是1000 * 562.我的测试设备是三星I9103,屏幕尺寸是480 * 800.我的项目布局很简单,只有ImageView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView 
    android:id="@+id/test1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:src="@drawable/pic_1000_562"/>
 </RelativeLayout>

我使用下面的代码来获取drawable和ImageView大小

    public void onWindowFocusChanged(boolean hasFocus){
    ImageView imageView=(ImageView)findViewById(R.id.test1);
    Log.v("Testresult","width= "+imageView.getWidth()+" height= "
    +imageView.getHeight());
    Log.v("Testresult","drawawidth= "+imageView.getDrawable().getBounds().width()+
            " drawableheight= "
    +imageView.getDrawable().getBounds().height());
}

但是我得到了

11-17 17:48:46.865: V/Testresult(15225): width= 480 height= 690
11-17 17:48:46.865: V/Testresult(15225): drawawidth= 1000 drawableheight= 562

我的问题是为什么drawabldwidth是1000而不是480,因为图像必须缩放以适应屏幕?

1 个答案:

答案 0 :(得分:2)

这是因为您的ImageView占据整个屏幕,因此需要设备的分辨率。我想这部分很清楚。

至于drawable,无论ImageView大小如何,它都将获得与您的资源相同的drawable和大小。 ImageView较小,可绘制仍然相同无关紧要。


要获得缩放图像的尺寸,您可以获得水平和垂直比例:

  • 水平:480/1000 = 0.48
  • 垂直:562/800 = 0.7025

图像将按较低值(本例中为0.48)进行缩放。所以缩放的尺寸是:

  • 水平:1000 * 0.48 = 480
  • 垂直:562 * 0.48 = 269.76