android提供了多個文件夾來解決適配問題,可這會導致應用程序的大小很大,對於ui較多的應用不太可取。
目前大多數應用都是提供了一套hdpi的圖,andorid根據手機屏幕的大小是會做自動適配的。
如果你想讓這些改變更可控,可以嘗試如下做法。
做一套符合當前主流手機的圖(比如以800寬的屏幕爲基準的圖片)。儘量做hdpi或者xhdpi的圖 ,以免縮放時丟失像素。
首先通過如下方法獲取當前手機的寬高。
final DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
final int height = displayMetrics.heightPixels;
final int width = displayMetrics.widthPixels;
再通過如下的工具類,根據當前手機的寬高,算出需要縮放的比例。
public class AdaptationClass {
private final static float FINAL_WIDTH = 800; //你所提供的一套圖的基準寬度
float Coefficient_X;
public AdaptationClass(float width, float height,float density) {
this.Coefficient_X = width / FINAL_WIDTH;
}
public int changeImage(int w) {
return Math.round(Coefficient_X * w);
}
}
如果圖片的寬是415像素,那麼在設置圖片寬度的時候調用即可自動轉換成適應當前屏幕的像素值。圖片的寬出來後,高度可以根據圖片的寬高比算出。
LayoutParams lp = new LayoutParams(changeImage(415),changeImage(415)*高寬比);
或者LayoutParams lp = new LayoutParams(changeImage(415),changeImage(高度));
ImageView imageView = new ImageView(this);
imageView.setLayoutParams(lp);
對於高度較大的圖片,可以考慮放在scrollview中,以免有些手機顯示不全。
有些圖片直接設爲background,在不同的分辨率下會變形。
可以考慮通過FrameLayout中放imageview的方式解決。(imageview的寬高可通過設置LayoutParam在程序中根據手機屏幕大小動態生成)
應用的歡迎界面可以採用純色背景+imageview實現,imageView的ScaleType設爲centerInside,純色邊界可以很大程度規避顯示不全的問題。
jpg格式要比png的小很多,所以在沒有透明要求的情況下儘量使用jpg格式。