教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

Android培訓(xùn)之屏幕適配(2)

更新時(shí)間:2016年10月31日17時(shí)30分 來(lái)源:傳智播客Android培訓(xùn) 瀏覽次數(shù):


2,如何支持屏幕的密度?
         對(duì)于屏幕密度進(jìn)行優(yōu)化,主要指的就是放置圖片。
1.如果需要設(shè)定控件或者圖片的寬高時(shí),使用非密度制約像素,也就是dp和sp,可以適配屏幕的大小和密度。

        2.提供備用的視圖。
    提供多套圖片。
這樣高分辨的手機(jī)顯示不會(huì)造成模糊的現(xiàn)象,低分辨率手機(jī)顯示不會(huì)模糊圖片也不會(huì)內(nèi)存溢出。
   3.如何去實(shí)施自適應(yīng)的用戶界面的流程。
        (1).確定當(dāng)前的布局。 
(2).確定當(dāng)前布局做出的響應(yīng)。顯示結(jié)果是單面板還是雙面板。
(3).可以重復(fù)的使用其他的activity當(dāng)中的碎片。
        (4).處理屏幕適配時(shí)發(fā)生的變化。


在代碼中獲取屏幕的寬度和高度:
    //獲取屏幕寬高的第一種方式:
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
Log.i("tag", "width=="+width+",height=="+height);
//獲取屏幕寬高的第二種方式:
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);
width = outMetrics.widthPixels;

在代碼中獲取包的信息的方法:
String pkName = this.getPackageName();
Log.i("tag", "當(dāng)前應(yīng)用的包名:"+pkName);
//獲取應(yīng)用包管理器
PackageManager pm = this.getPackageManager();
//獲取應(yīng)用的信息
try {
PackageInfo info = pm.getPackageInfo(pkName, 0);
int versionCode = info.versionCode;
String versionName = info.versionName;
Log.i("tag", "versionCode=="+versionCode+",versionName=="+versionName);
} catch (NameNotFoundException e) {
e.printStackTrace();
}


圖片的加工處理代碼:
//1.得到用來(lái)設(shè)置圖片尺寸的參數(shù)的對(duì)象
BitmapFactory.Options options = new BitmapFactory.Options();
//2.解碼邊緣
options.inJustDecodeBounds = true;
//3.對(duì)圖片進(jìn)行解碼
BitmapFactory.decodeByteArray(data, 0, data.length, options);
//4.獲取圖片原來(lái)的寬度和高度
int oldWidth = options.outWidth;
int oldHeight = options.outHeight;
//5.得到壓縮的比例
double scaleWidth = oldWidth/newWidth;   //寬度要壓縮的比例
double scaleHeight = oldHeight/newHeight;  //高度要壓縮的比例。
//6.取出寬高的壓縮比例當(dāng)中較大的值作為縮放比例
int scale = (int) Math.round(scaleHeight>scaleWidth?scaleHeight:scaleWidth);
//7.設(shè)置參數(shù)當(dāng)中的縮放比例,必須要設(shè)置大于1的整數(shù),數(shù)越大,縮放越小
options.inSampleSize = scale;
//8.縮放邊緣
options.inJustDecodeBounds = false;
//9.通過(guò)屬性參數(shù)對(duì)象得到新的位圖
Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length,options);


本文版權(quán)歸傳智播客Android培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Android培訓(xùn)學(xué)院

首發(fā):http://metathetuscanyresort.com/Android

0 分享到:
和我們?cè)诰€交談!