### 前言 說道自定義View,我們一定會想到,自定義View的繪製流程 - 測量階段(measure) - 佈局階段(layout) - 繪製階段(draw) 我們看到的一些炫酷的view效果,都是在繪製方法里去實現的, 也就是`draw(Canvas)`, 我們先放下 測量與佈局, 先從繪製基 ...
### 前言 說道自定義View,我們一定會想到,自定義View的繪製流程 - 測量階段(measure) - 佈局階段(layout) - 繪製階段(draw) 我們看到的一些炫酷的view效果,都是在繪製方法里去實現的, 也就是`draw(Canvas)`, 我們先放下 測量與佈局, 先從繪製基礎開始學起。 ### 詳解 說到`ondraw(Canvas)`方法,不得不提`Paint`與`Canvas`。我們先來看`Paint` ###### 1.Paint Paint就是"畫筆",我們先去看下Paint類的源碼解釋: ``` ** * The Paint class holds the style and color information about how to draw * geometries, text and bitmaps. */ ``` Paint類可以畫幾何圖形,文本與bitmap。 Paint類方法比較多, 這裡拿Paint.Style舉例: - Paint.Style.FILL:填充內部 - Paint.Style.FILL_AND_STROKE :填充內部和描邊 - Paint.Style.STROKE :描邊 ![](https://img2018.cnblogs.com/blog/1312938/201909/1312938-20190921160047699-1410664224.png) ###### 2.Canvas **(1).定義** Canvas就是“畫布”,我們先去看下Canvas類的源碼解釋: ``` * The Canvas class holds the "draw" calls. To draw something, you need * 4 basic components: A Bitmap to hold the pixels, a Canvas to host * the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, * Path, text, Bitmap), and a paint (to describe the colors and styles for the * drawing). ``` - 承載像素的點陣圖 - 持有繪畫方法調用的畫布 - 描述畫圖顏色和風格的畫筆 - 畫圖的類型。 **(2).繪製方法** 方法比較多了,這裡我就隨便舉幾個例子: - 畫線 ``` Paint paint=new Paint(); paint.setColor(Color.BLUE); paint.setStrokeWidth(20); paint.setStyle(Paint.Style.FILL); canvas.drawLine(200,200,450,200,paint); ``` ![](https://img2018.cnblogs.com/blog/1312938/201909/1312938-20190921160048089-269409115.png) - 畫矩形 ``` Paint paint=new Paint(); paint.setColor(Color.BLUE); paint.setStrokeWidth(50); paint.setStyle(Paint.Style.FILL ); canvas.drawRect(100,100,200,200,paint); ``` ![](https://img2018.cnblogs.com/blog/1312938/201909/1312938-20190921160048326-68976265.png) - 畫扇形-140度 ``` Paint paint=new Paint(); paint.setColor(Color.BLUE); paint.setStrokeWidth(50); paint.setStyle(Paint.Style.FILL ); canvas.drawArc(100,100,400,400,0,140,false,paint); ``` ![](https://img2018.cnblogs.com/blog/1312938/201909/1312938-20190921160048569-499644571.png) 更多的方法以及方法的含義可以去下麵的API地址去看! [API地址](https://developer.android.google.cn/reference/android/graphics/Canvas.html) 今天就講到這裡 ,繪製基礎還有一個非常重要的類,**Paht(路徑)類**,下一節講一下。 希望對大家有所幫助! 大家可以關註我的微信公眾號:「秦子帥」一個有質量、有態度的公眾號! ![公眾號](https://img2018.cnblogs.com/blog/1312938/201909/1312938-20190921160048726-1254022071.jpg)