1.關於高清屏幕的顯示
答:
一些基本概念:- 分辨率:整個屏幕的像素數目,爲了表示方便一般用屏幕的像素寬度(水平像素數目)乘以像素高度表示,形如1280x720。
- 屏幕密度:表示單位面積內的像素個數,通常用dpi爲單位,即每英寸多少個像素點
- px:長度單位,具體像素
- dp:長度單位,與屏幕密度無關,推薦使用,顯示的時候根據具體平臺屏幕密度的不同最終轉換爲相應的像素長度,具體轉換規則是: 1dp = (目標屏幕密度/標準密度)*px,標準密度爲160dpi,例如,1dp長度在密度爲160dpi的平臺表示一個像素的長度,而在240dpi的平臺則表示1.5個像素的長度
- sp:scaled pixels(放大像素). 主要用於字體,根據 google 的建議,TextView 的字號最好使用 sp 做單位
標準屏幕
- android平板標準分辨率爲1280*752,標準密度爲160dpi
- 高清pad
- 三星高清pad爲2560*1600,密度爲320dpi
- 昂達高清pad爲2048×1440,密度爲320dpi
- 分辨率和DPI不成正比,
我們人眼看到的大小
- 與dp長度一樣,dp一樣,人眼看到的大小就一樣
答:代碼中寫入的硬值,例如一些組件的固定長度,這些值都是px,都需要轉換成dp,替換方法爲
public static int transform(int num) {
if (mRate == 0) {
mRate = getApplicationContext().getResources().getDisplayMetrics().density;
}
return (int) (num * mRate);
}
或者
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
num, getResources().getDisplayMetrics());
3.關於高清屏圖片縮小問題答: new BitmapDrawable(getResources(),圖片SD路徑);和BitmapFactory.decodeFile(loc);上兩種方法讀取圖片讀取的圖片爲圖片實際像素點(px),展示時候需要放大【目標屏幕密度/標準密度】倍數,
不要使用new BitmapDrawable(Bitmap對象),這樣會縮小【目標屏幕密度/標準密度】倍的圖片,應該使用new BitmapDrawable(getResources(),Bitmap對象)
public Bitmap getBitMap(String loc) {
Bitmap bitmap = BitmapFactory.decodeFile(loc);
if (bitmap == null) {
return null;
}
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix(); // 創建操作圖片用的Matrix對象
float rate = getApplicationContext().getResources().getDisplayMetrics().density;
matrix.postScale(rate, rate); // 設置縮放比例
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,
matrix, true);
return newbmp;
}