個人讀書筆記戴已,部分沒讀懂的知識點(diǎn)可能會簡單概括或缺失,以后反復(fù)閱讀后再完善锅减。
第6章 Android繪圖機(jī)制與處理技巧
6.1 屏幕的尺寸信息
6.1.1 屏幕參數(shù)
屏幕大小 指屏幕對角線的長度糖儡,通常用“寸”來度量。
分辨率 指手機(jī)屏幕的像素點(diǎn)的個數(shù)怔匣。
PPI 每英寸像素握联,又被稱為DPI。由對角線的像素點(diǎn)除以屏幕的大小得到劫狠。
6.1.2 系統(tǒng)屏幕密度
6.1.3 獨(dú)立像素密度
Android系統(tǒng)使用mdpi即密度值為160的屏幕作為標(biāo)準(zhǔn)拴疤,在這個屏幕上1px=1dp。
在mdpi這1dp=1px,在hdpi中1dp=1.5px,在xhdpi中1dp=2px,在xxhdpi中1dp=3px独泞。
ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12呐矾。
6.1.4 單位轉(zhuǎn)換
public class DisplayUtil {
/*將px值轉(zhuǎn)換為dip或dp值,保證尺寸大小不變*/
public static int px2dip(Context context, float pxValue) {
final float scale=context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/*將dip或dp值轉(zhuǎn)換為px值懦砂,保證尺寸大小不變*/
public static int dip2px(Context context, float dipValue) {
final float scale=context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
/*將px值轉(zhuǎn)換為sp值蜒犯,保證文字大小不變*/
public static int px2sp(Context context, float pxValue) {
final float fontScale=context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
/*將sp值轉(zhuǎn)換為px值组橄,保證文字大小不變*/
public static int sp2px(Context context, float spValue) {
final float fontScale=context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
}
6.2 2D繪圖基礎(chǔ)
系統(tǒng)通過提供的Canvas對象來提供繪圖方法。它提供了各種繪制對象的API罚随。
6.3 Android XML 繪圖
6.3.1 Bitmap
6.3.2 Shape
6.3.3 Layer
Layer可以實現(xiàn)Photoshop中的圖層效果玉工。
6.3.4 Selector
Selector可以通過不同的事件設(shè)置不同的圖像。
6.4 Android 繪圖技巧
6.4.1 Canvas
Canvas.save()方法是將之前所有已繪制圖像保存起來淘菩,讓后續(xù)的操作就好像在一個新的圖層上操作一樣遵班。
Canvas.restore()方法是將我們在save()之后的所有圖像與save()之前的圖像合并。
6.4.2 Layer圖層
6.5 Android 圖像處理之色彩特效處理
6.5.1 色彩矩陣分析
Android中潮改,系統(tǒng)使用一個顏色矩陣——ColorMatrix狭郑,來處理圖像的色彩效果。
6.5.1.1 改變偏移量
6.5.1.2 改變顏色系數(shù)
6.5.1.3 改變色光屬性
6.5.2 Android顏色矩陣--ColorMatrix
一個顏色矩陣改變圖片的實例
6.5.3 常用圖像顏色矩陣處理效果
6.5.4 像素點(diǎn)分析
系統(tǒng)提供了Bitmap.getPixels()方法來幫我們提取整個Bitmap中的像素點(diǎn)汇在,并保存到一個數(shù)組中翰萨。
6.5.3 常用像素點(diǎn)處理效果
6.6 Android 圖像處理之圖形特效處理
6.7 Android 圖像處理之畫筆特效處理
6.7.1 PorterDuffXfermode
PorterDuffXfermode設(shè)置的是兩個圖層交集區(qū)域的顯示方式。
6.7.2 Shader
Shader用來實現(xiàn)一系列的漸變糕殉、渲染效果亩鬼。
PathEffect
PathEffect指用各種筆觸效果來繪制一個路徑。
6.8 View之孿生兄弟--SurfaceView
6.8.1 SurfaceView與View的區(qū)別
View通過刷新來重繪視圖阿蝶,Android系統(tǒng)通過發(fā)出VSYNC信號來進(jìn)行屏幕的重繪雳锋,
刷新的間隔時間為16ms。如果16ms內(nèi)View沒有完成所需要執(zhí)行的所有操作羡洁,
那么用戶在視覺上就會產(chǎn)生卡頓魄缚。
SurfaceView用來解決刷新的問題。
區(qū)別:
View主要適用于主動更新焚廊,而SurfaceView主要適用于被動更新冶匹。
View在主線程對畫面進(jìn)行刷新,而SurfaceView通常會通過子線程刷新咆瘟。
View繪圖時沒有雙緩沖機(jī)制嚼隘,而SurfaceView在底層就已經(jīng)實現(xiàn)了雙緩沖機(jī)制。
6.8.2 SurfaceView的使用
SurfaceView通常套用模板來進(jìn)行編寫袒餐。