2012-07-22 92 views
0

如何确定缩放的ImageView的尺寸?我尝试使用的getWidth()&的getHeight它总是返回0.我的XML布局为ImageView的如下:我缩放的ImageView的尺寸查看

<ImageView 
      android:id="@+id/imgView" 
      android:layout_width="300dp" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true" 
      android:scaleType="fitXY" 
      android:src="@drawable/my_image" /> 

请提出好的建议。

回答

1

您可能过早调用getWidth()方法。视图在屏幕上呈现之前,ImageView的宽度和高度将不可用。尝试在onWindowFocusChanged中获取它们:

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

    int width = iv.getWidth(); 
    int height = iv.getHeight(); 

    // ... 
} 
+0

该解决方案非常简单。但有一个问题。当设备方向从横向改变为纵向时,会引发异常。 – Debopam 2012-07-22 17:34:55

+0

您将不得不检查您的logcat以查看异常原因。 – 2012-07-22 17:36:18

+0

我检查了我的LogCat。它在MyActivity.java文件的第103行说NullPointerException。 但是第103行:只是int leftMargin = imgView.getWidth()+ 10; 如何在纵向模式下在纵向模式下不可能出现细节指针异常? – Debopam 2012-07-22 17:42:50

0

您不会在onCreate中获得这些尺寸。视图尚未测量,层次结构未设置。这些都可以工作,但你需要在应用程序绘制屏幕后在某个地方使用它们,或者另一种方法是设置ViewTreeObserver以在布局设置时通知您。 ViewTreeObserver

下面是它如何做的:

  1. 通话getVieeTreeObserver()在您的活动去的viewTreeObserver参考。

然后添加一个onGlobalLayoutListener:

observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
     { 
      @Override 
      public void onGlobalLayout() 
      { 
       ViewTreeObserver obs = MyActivity.this.getViewTreeObserver(); 
       obs.removeGlobalOnLayoutListener(this); 
      } 
     }); 

这里面onGlobalLayout方法,你可以用你的观点,并得到其宽度和高度,做任何他们。

+0

MyActivity.this.getViewTreeObserver() - 不存在。 – Debopam 2012-07-22 17:37:49