2014-10-29 123 views
0

我正在開發一個帶有多個片段的android應用程序,每個片段包含來自其他片段的多個不同位圖。由於.apk文件的大尺寸爲每個可繪製的密度文件夾提供了這些位圖,因此我決定爲drawable-xxhdpi提供一個單獨的高分辨率位圖(來自每個不同片段的每個不同的一個高分辨率位圖)並在運行時根據設備屏幕分辨率和/或密度對其進行縮放。如何縮放高分辨率位圖以匹配設備屏幕分辨率和密度?

根據Andropid開發者指南關於縮放位圖,我有點困惑Displaying Bitmaps Efficiently我無法理解此代碼是否將位圖縮放爲屏幕像素或屏幕密度或兩者的分辨率。

正如我可以在該代碼中看到:

mImageView.setImageBitmap( decodeSampledBitmapFromResource(getResources(),R.id.myimage,100,100));

它創建了一個100x100的圖像縮略圖,所以我supose我必須通過這些參數的屏幕分辨率,屏幕密度的寬度和高度,但不知道...

我如何可以匹配縮放位圖到屏幕組態?

感謝每一個答案。

回答

1

首先,我會極力阻止不使用內置的Android系統,該系統會根據屏幕大小/密度自動加載出現在多個可繪製文件夾中的圖像。確實,這樣做會增加APK的大小,但加載單個位圖並在運行時縮小/放大會降低應用程序的性能,並且很可能導致浪費內存分配問題以及各種各樣的其他錯誤。

如果你堅持自己縮放位圖,那麼你可以用你的方法看到的第一個問題是,你傳遞的參數(100,100)的大小是像素的大小。不同密度的設備將具有不同的像素數量,因此100x100在一個設備上可能顯得非常大,但在具有更高密度的設備上非常小。

去這裏的方法是使用設備獨立像素(dip或dp)。具有相同屏幕尺寸的設備的寬度將始終爲相同的dp,高度爲&。既然你指定的這個方法需要的像素,那麼一個好辦法,DP和像素之間的轉換顯示here

Resources r = getResources(); 
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, amountInDp, r.getDisplayMetrics()); 
+0

對不起,我也許是困惑我的問題。我編輯它是清楚的。謝謝你的回答,這是我一直在尋找的。 – GmloMalo 2014-10-30 10:51:28