2011-06-30 37 views
7

應該是一個簡單的。爲什麼ImageView中drawable的寬度/高度是錯誤的?

當我拉image.getDrawable().getIntrinsicWidth()我得到一個大於源圖像寬度的值。它的X座標是返回2880而不是1920年,這是1.5倍太大?

我想知道閹具有「中心」的scaleType的ImageView的影響,但,根據本documentation:「在視圖中,中心圖像但是不執行任何縮放

這裏是源:

<ImageView 
    android:id="@+id/backgroundImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/background" 
    android:scaleType="center"/> 
+0

你在'ImageView'中使用'wrap_content'嗎? – Macarse

+0

是的,我的'ImageView'在高度和寬度都有'wrap_content'。 – Graeme

回答

19

你說的是繪製從/res文件夾。它在哪個文件夾中?

  • /res/drawable
  • /res/drawable-mdpi
  • /res/drawable-hdpi

    等。

什麼是你正在測試的設備的密度是多少?它是一個普通密度爲240dpi的Nexus S嗎?因爲如果源繪圖文件位於drawable-mdpi文件夾中,並且您正在240dpi設備上進行測試,那麼Android系統會自動將可繪製的比例縮小爲1.5,以便物理大小與基準設備密度一致(160dpi 。

當您撥打getIntrinsicWidth()時返回的是可繪製的大小想要在Android縮放drawable之後。你會發現,2880 = 1920 * 1.5

如果您將繪製在/res/drawable Android系統會將這些作爲可繪意味着MDPI設備,從而爲您的Nexus S.升頻如果這是爲那些HDPI屏幕和你不想要這個到高檔然後嘗試把它放在drawable-hdpi

0

檢查,如果它返回i的值t的顯示大小,這不是實際大小。例如,傳統800x480手機上的50x320px橫幅廣告顯示爲75x480。

應該能夠比較密度(或你的眼睛!),看看它在做什麼。

+0

差異不是那麼大(它給1660而不是1400)。我如何檢查密度? – Graeme

0

這可能與您遇到的問題沒有任何關係,但僅僅用於踢球,無論如何我都會建議您確定:您是否在清單中指定了android:minSdkVersion

我之所以提到這一點,只是因爲有一段時間我沒有在一個項目中這樣做,而且我知道這會導致屏幕密度上升並導致各種奇怪的問題。

+0

我有我的minSDK版本設置爲10 – Graeme

3

您是否嘗試過用密度乘以高度和寬度:

getResources().getDisplayMetrics().density 

是從網服務或下載您繪製?如果它被下載,你必須給它的密度:

DisplayMetrics metrics = new DisplayMetrics(); 
getContext().getWindowManager().getDefaultDisplay().getMetrics(metrics); 
Resources r = new Resources(getContext().getAssets(), metrics, null); 
BitmapDrawable bmd = new BitmapDrawable(r, bitmap); 
相關問題