前言:
從事Android開發一年半啦,只知道每天按照需求計劃實現業務的邏輯,其實我知道我最差的就是繪制圖形,所以從今天開始回爐重修,一點一滴重新學習,在這里記錄一下。說些廢話,最近在聽一個廣播節目,《自控力》,如今的社會真的是太浮躁啦,人們都是依賴電子產品入魔,倒是簡書這里如一股清流,在這個浮躁的社會給了我一個明燈,比心,不是專業寫博客的,所以排版有點亂。
工具:Androidstudio、夜神android模擬器
- 認識Point與Canvas,畫筆與畫布
- 認識Rect與RectF
先介紹Rect與RectF,下面會用到
相同點都是用于表示坐標系中的一塊矩形區域,并可以對其做一些簡單操作。這塊矩形區域,需要用左上和右下兩個坐標點表示。
區別就是精度不一樣。Rect是使用int類型作為數值,RectF是使用float類型作為數值。兩個類型提供的方法也不是完全一致。具體使用情況請閱讀源碼。
Paint:畫筆
常用函數 | 函數簡介 |
---|---|
setARGB(int a, int r, int g, int b) | 設置畫筆的顏色,a代表透明度,r,g,b代表顏色值 |
setAlpha(int a) | 設置alpha不透明度,范圍為0~255 |
setColor(int color) | 設置畫筆顏色 |
setAntiAlias(boolean aa) | 是否抗鋸齒 |
setTextSize(float textSize) | 字體大小 |
setStyle(Paint.style style) | 設置畫筆的風格,Paint.Style. FILL :實心 Paint.Style.FILL_AND_STROKE:同時實心和空心、Paint.Style.STROKE:空心 |
Canvas:畫布
常用函數 | 函數簡介 |
---|---|
drawCircle(float cx, float cy, float radius,Paint paint) | 繪制圓形,參數1為中心點x軸位置、參數2為中心點y軸位置、參數3為圓形半徑、參數4為畫筆 |
drawLine(float startX, float startY, float stopX, float stopY, Paint paint) | 繪制直線,參數1為起點x軸坐標、參數2為起點y軸坐標、參數3為x軸終點坐標、參數4為y軸終點坐標、參數5為畫筆 |
canvas.drawOval(new RectF(float left, float top, float right, float bottom), p) | 繪制矩形,其中RectF中前兩個參數表示矩形左上角點的坐標,后兩個參數標示右下角點的坐標 |
drawRect(RectF rect, Paint paint) | 繪制一塊區域,參數一為RectF一個區域 |
drawPath(Path path, Paint paint) | 繪制一個路徑,參數一為Path路徑對象,通過Path設置路徑的起點與終點,也可繪制特殊路徑線條 例如:傳說中的貝塞爾曲線,只需設置對應的控制節點 |
代碼塊
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint()
paint.setColor(Color.RED);// 設置紅色
canvas.drawCircle(150, 150, 50, paint);// 小圓
paint.setAntiAlias(true);
paint.setARGB(50,0,0,225);
paint.setAntiAlias(false);
canvas.drawCircle(300, 300, 100, paint);// 大圓
RectF oval2 = new RectF(60, 100, 200, 240);// 設置個新的長方形,掃描測量
canvas.drawArc(oval2, 200, 130, false, paint);
//畫貝塞爾曲線
paint.setTextSize(30);
canvas.drawText("畫貝塞爾曲線:", 50, 310, paint);
paint.reset();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.GREEN);
paint.setStrokeWidth(5);
Path path2=new Path();
path2.moveTo(100, 320);//設置Path的起點
path2.quadTo(350, 910, 670, 400); //設置貝塞爾曲線的控制點坐標和終點坐標
canvas.drawPath(path2, paint);//畫出貝塞爾曲線
}
QQ圖片20170802134116.png