Bitmap類
private static class SampleView extends View {
private Bitmap mBitmap;
private Bitmap mBitmap2;
private Bitmap mBitmap3;
private Shader mShader;
private static void drawIntoBitmap(Bitmap bm) {
float x = bm.getWidth();
float y = bm.getHeight();
Canvas c = new Canvas(bm);
Paint p = new Paint();
/* Paint類的一個邊緣光滑的方法,true表示邊緣光滑*/
p.setAntiAlias(true);
p.setAlpha(0x80);//設置顏色透明度爲十六進制80
/*在位圖矩陣區域內畫一個相切的圓*/
c.drawCircle(x/2, y/2, x/2, p);
p.setAlpha(0x30);
/*用指定的PorterDuff模型創建xformode,PorterDuff.Mode.SRC
* 表示下面要繪製的文本應在上面繪製的圓的上層
*/
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
p.setTextSize(60);
/*Paint.Align 是文本對齊方式的一個枚舉類
* CENTER表示文本居中
* LEFT 表示做對齊
* RIGHT 表示右對齊
*/
p.setTextAlign(Paint.Align.CENTER);
/*FontMetrics是字體度量的類描述了給定文本大小的各種各樣的字體度量。
* ascent 表示到基準線之上的距離
* bottom 表示到基準線之下的最大距離,它是最低的字體類型
* descent 表示到基準線之下的距離
* leading 空格字符到基準線的距離,爲0
* */
Paint.FontMetrics fm = p.getFontMetrics();
c.drawText("Alpha", x/2, (y-fm.ascent)/2, p);
}
public SampleView(Context context) {
super(context);
setFocusable(true);
/*取得資源文件的輸入流*/
InputStream is = context.getResources()
.openRawResource(R.drawable.app_sample_code);
/*BitmapFactory 是位圖的一個工廠類
* 從各種各樣的位圖對象中創建位圖對象,包括文件,流,字節數組。
* */
mBitmap = BitmapFactory.decodeStream(is);
/*extractAlpha()位圖的這個方法是通過提取
* 了原始位圖的透明通道值重建新的位圖*/
mBitmap2 = mBitmap.extractAlpha();
/*通過位圖的寬度和高度已經位圖的顏色配置來創建位圖
* Bitmap.Config是內部枚舉類表示位圖的顏色配置
* 它的顏色配置有ALPHA_8、ARGB_4444、ARGB_8888、RGB_565
* */
mBitmap3 = Bitmap.createBitmap(200, 200, Bitmap.Config.ALPHA_8);
drawIntoBitmap(mBitmap3);
/*LinearGradient類是Shader的一個子類,它實現的是一個線性梯度變化的一個
* 着色器,(0,0)到(100,70)的直線式顏色梯度變化線
* 這個梯度變化是在紅綠藍之間均勻變化的
* Shader.TileMode是超出梯度線的顏色變化模式
*CLAMP 固定shader繪畫時顏色超過原始邊界(梯度線)的部分顏色用邊界顏色繪製。
*REPEAT 在水平和垂直方向重複使用着色器的色相,但邊界分明
*MIRROR 在水平和垂直方向重複使用着色器的色相,交換的映像色相使得鄰
*近的色相總是一致;顏色關於梯度線鏡像
* */
mShader = new LinearGradient(0, 0, 100, 70,
new int[] {Color.RED, Color.GREEN, Color.BLUE },
null, Shader.TileMode.MIRROR);
}
@Override protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
Paint p = new Paint();
float y = 10;
/*設置畫筆顏色爲紅色*/
p.setColor(Color.RED);
/*調用畫布的drawBitmap方法在指定的位置用指定的畫筆畫指定的位圖*/
canvas.drawBitmap(mBitmap, 10, y, p);
/*設置下一個位圖繪製的y座標值*/
y += mBitmap.getHeight() + 10;
canvas.drawBitmap(mBitmap2, 10, y, p);
y += mBitmap2.getHeight() + 10;
/*設置畫筆的着色器*/
p.setShader(mShader);
canvas.drawBitmap(mBitmap3, 10, y, p);
/*這個類主要裝載了繪製直線曲線等的幾何路徑。*/
Path path = new Path();
/*畫上面的梯度變化線*/
path.moveTo(0, 0);
path.lineTo(100,70);
p.setColor(Color.RED);
/*Paint.Style畫刷的樣式枚舉類
* STROKE 只繪製筆畫形狀
* Fill 填充
* FILL_AND_STROKE 既畫筆畫又填充
* */
p.setStyle(Paint.Style.STROKE);
/*用指定的路徑和指定的畫刷畫要求的路徑*/
canvas.drawPath(path, p);
}
}
}