2013-02-25 53 views
1

我有使用imageView.getWidth();返回屏幕,而不是位圖的寬度

ImageView artCover = (ImageView)findViewById(R.id.imageView1); 
int coverWidth = artCover.getWidth(); 

但寬度看起來像這樣

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_alignTop="@+id/textView3" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="80dp" 
    android:layout_marginTop="40dp" 
    android:onClick="Time" 
    android:adjustViewBounds="false" 
    android:src="@drawable/ic_launcher" /> 

我試圖讓在ImageView的顯示的圖像的寬度的ImageView的返回值與屏幕寬度相同,而不是圖像(當圖像寬度小於屏幕寬度時)。如果我做

int coverHeight = artCover.getHeight(); 

我得到正確的圖像高度。我怎樣才能獲得顯示圖像的寬度?

回答

8

您的imageview的位圖可能會相應縮放並對齊。你需要考慮到這一點。

// Get rectangle of the bitmap (drawable) drawn in the imageView. 
RectF bitmapRect = new RectF(); 
bitmapRect.right = imageView.getDrawable().getIntrinsicWidth(); 
bitmapRect.bottom = imageView.getDrawable().getIntrinsicHeight(); 

// Translate and scale the bitmapRect according to the imageview's scale-type, etc. 
Matrix m = imageView.getImageMatrix(); 
m.mapRect(bitmapRect); 

// Get the width of the image as shown on the screen: 
int width = bitmapRect.width(); 

(注意,我還沒有試過編譯上面的代碼,但你會得到它的要點:-))。 上述代碼僅在ImageView完成其佈局時才起作用。

+0

謝謝,看起來很有希望,但有什麼辦法可以在API 9上做到這一點(getMatrix需要API 11)? – azeam 2013-02-25 17:22:30

+0

我犯了一個錯字:調用應該是getImageMatrix(),而不是getMatrix。 getImageMatrix可用於api9。 – 2013-02-25 17:30:26

+0

這工作!我只需要將float從bitmapRect.width轉換爲一個整數。非常感謝,我一直在爲此奮鬥一段時間;) – azeam 2013-02-25 17:49:56

1

您必須等待查看樹已完全測量,可能比onPostResume()更晚。處理這種情況的一種方法是:

final ImageView artCover = (ImageView)findViewById(R.id.imageView1); 
artCover.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
     public void onGlobalLayout() { 
      int coverWidth = artCover.getWidth(); 
     } 
    } 
); 
+0

試過這個,但它不起作用。 getWidth();在onClick事件上調用,比onPostResume()晚得多,所以我認爲這不是問題。 – azeam 2013-02-25 15:16:49

1

您可以從imageview中獲取圖像並獲取圖像的寬度。

Bitmap bitmap = ((BitmapDrawable)artCover.getDrawable()).getBitmap();<p> 
bitmap.getWidth(); 
+0

謝謝。這使我獲得原始位圖的寬度,但不是縮放位圖的寬度。 – azeam 2013-02-25 17:23:18