android 螢幕自適應問題

來源:互聯網
上載者:User

 

這是我最近碰到的一個比較嚴重的問題,一直不能完美的解決。實在無奈之下,發帖到csdn android版提了一個問題,沒想到驚動了版主,給了我很大的協助,讓我可以完美的解決類似問題。決定以後蹲點csdn android論壇了。呵呵。

 

問題描述:

在WVGA 854 裝置上,圖片大小自適應變化得到的是錯誤結果,在我的項目上就是 圖片總會縮小。

比如說 854X90的圖片在經過自適應的時候,圖片寬度,高度會縮小1.5倍,這樣就會導致顯示的時候不能佔滿全屏。

 

問題分析:

我發現圖片讀取時正常的,是854x90,density 240也沒問題,和真機時一致的。但在一句代碼之後,density變成了160,高度,寬度同時縮小1.5倍。 這句代碼就是 BitmapDrawable drawable = new BitmapDrawable(bitmap);

 

很快我發現這是因為density發生了變化,android會自動根據density來對圖片進行自適應變化,從240 變 為 160,剛好是1.5倍,所以寬度,高度也相應的縮小1.5倍。

 

所以我確定問題是出在density上了,事實證明我的判斷也是對的。

 

解決方案:

在查閱android開發文檔後,發現從android 1.6開始才增加的根據density來自適應變化功能,而我們項目的api使用的是android 1.5。

1.5中沒有提供相應的API來根據真機的density來自適應,而是使用了一個預設的density 160. 這也就解釋了為什麼我每次經過BitmapDrawable的時候density變成了 160.

 

在1.6文檔說明中 我們項目中使用的api已經被deprected,而提供了根據resource來決定density的API介面

 

這是我們項目中使用的建構函式

BitmapDrawable

(Bitmap
bitmap)


This constructor is deprecated.
Use BitmapDrawable(Resources, Bitmap)

to ensure
that the drawable has correctly set its target density.

 

查閱API doc之後,我採用了下面這個建構函式

 

BitmapDrawable

(Resources
res, Bitmap
bitmap)

Create drawable from a bitmap, setting initial target density based on
the display metrics of the resources.

 

這個api說明中明確說了,會跟根據真機的density來設定初始target density。

這樣BitmapDrawable就會根據正確的density來對圖片進行自適應變化。

 

調用這個建構函式中的第一個參數很容易獲得,直接調用activity.getResources()就可以獲得,第二個參數就是我們原始的map。

 

就此,這個問題成功解決。

 

大家有疑問的可以留言。

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.