1,繼承自view,實作ondraw方法:
初始化畫筆,TextPaint paint,并設定畫筆屬性:
paint.setFlags(Paint.ANTI_ALIAS_FLAG):畫筆抗鋸齒。
paint.setStyle(Paint.Style.STROKE):設定畫筆樣式,預設全部填充Full
{ 1.Paint.Style.STROKE:描邊;
2.Paint.Style.FILL_AND_STROKE:描邊并填充
3.Paint.Style.FILL:填充
}
paint.setStrokeCap(Paint.Cap.ROUND):畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的圖形樣式
{ 1,圓形樣式 Cap.ROUND,
2,方形樣式 Cap.SQUARE
}
paint.setColor(0xff00ff00):設定畫筆顔色
Canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint):利用TextPaint在canvas上繪制線條:坐标從(startX,startY)到(stopX,stopY),坐标點起點為左上角,起點為0,0
2,在xml布局裡面設定自定義布局控件
背景顔色繪制:
canvas.drawARGB(a, r, g, b):其中a,r,g,b為0到255的int值,用來組成畫布的背景顔色
canvas.drawColor(Color.BLUE) :将會以顔色ARBG填充整個控件的Canvas背景
canvas.drawColor(Color.BLUE, Mode.SCREEN) :繪制顔色,但是要制定一個mode
mode參數:

對應下圖:
對應如下規則:
SRC :隻繪制源圖像
DST :隻繪制目标圖像
DST_OVER :在源圖像的頂部繪制目标圖像
DST_IN :隻在源圖像和目标圖像相交的地方繪制目标圖像
DST_OUT :隻在源圖像和目标圖像不相交的地方繪制目标圖像
DST_ATOP :在源圖像和目标圖像相交的地方繪制目标圖像,在不相交的地方繪制源圖像
SRC_OVER :在目标圖像的頂部繪制源圖像
SRC_IN :隻在源圖像和目标圖像相交的地方繪制源圖像
SRC_OUT :隻在源圖像和目标圖像不相交的地方繪制源圖像
SRC_ATOP :在源圖像和目标圖像相交的地方繪制源圖像,在不相交的地方繪制目标圖像
XOR :在源圖像和目标圖像重疊之外的任何地方繪制他們,而在不重疊的地方不繪制任何内容
LIGHTEN :獲得每個位置上兩幅圖像中最亮的像素并顯示
DARKEN :獲得每個位置上兩幅圖像中最暗的像素并顯示
MULTIPLY :将每個位置的兩個像素相乘,除以255,然後使用該值建立一個新的像素進行顯示。結果顔色=頂部顔色*底部顔色/255
SCREEN :反轉每個顔色,執行相同的操作(将他們相乘并除以255),然後再次反轉。結果顔色=255-(((255-頂部顔色)*(255-底部顔色))/255)
如上代碼ondraw裡面代碼:
效果:
效果如下:
效果:
擦,還有這種:
如上三種方法來進行繪制方塊:
canvas.drawcircle為繪制圓
繪制圓,style有三種:
代碼試試,看看效果:
填充,填充輪廓和裡面
Fill或者Fill_AND_STROKE:
效果如上圖:
設定為:
Stoke,繪制輪廓
paint.setStyle(Style.STROKE);
雖然調用的是drawoval,其實還是主要通過RectF和上下左右的位置的計算來進行控制
paint.setStyle(Style.STROKE)為圖2
BitmpaUtils.drawableToBitmap方法代碼,将drawable轉換為bitmap:
執行效果:
縮放借助Matrix來實作:
看下效果,寬高縮小一半:
對圖檔進行旋轉:
matrix.postRotate(45);