最近在學習自定 View 的內容,發現其實在 onDraw() 的時候可以對 Canvas 進行各種各樣的操作,比如平移、旋轉、縮放、傾斜當然還有切割畫布和反向切割畫布。下面就來根據實際操作介紹一下。
1.平移 translate
//先設置畫筆
mPaint.setStrokeWidth(5);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.RED);
//平移
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.translate(50, 50);
mPaint.setColor(Color.YELLOW);
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.translate(-100, -100);
mPaint.setColor(Color.BLUE);
canvas.drawRect(0, 0, 500, 500, mPaint);
第一步就是先畫一個矩形用來做參照,然後對畫布進行一個平移操作 canvas.translate(50, 50); 第一個參數是 x 軸平移距離,第二個是 y 平移的距離,平移後我們設置一下畫筆顏色然後再畫一個矩形,效果如下圖
2.縮放 scale
//縮放
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.scale(0.5f, 0.5f);
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.scale(1.5f, 1.5f);
canvas.drawRect(0, 0, 500, 500, mPaint);
縮放有一個重載的方法 canvas.scale(0.5f, 0.5f, 500, 500);
前面還是 x y 縮放的比列,後面的兩個參數表示的是座標點,保持哪個點不變然後開始縮放
保持右下角的點不變效果如下
3.旋轉 rotate
//旋轉
canvas.translate(400, 400);
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.rotate(45);
mPaint.setColor(Color.BLUE);
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.rotate(45,250,250);
mPaint.setColor(Color.GREEN);
canvas.drawRect(0, 0, 500, 500, mPaint);
旋轉是按照角度旋轉的,也有一個重載的方法表示你按照哪個點進行旋轉。效果如下
第一次旋轉後,第二次再設置表示在旋轉的基礎上再進行相應的操作
4.傾斜 skew
這個有兩個參數 sx、sy 這些都是 float 類型
傾斜是根據 三角函數中的 正切函數tan(A)=a/b,就是說對邊比鄰邊
1就是45度
//傾斜
canvas.drawRect(0, 0, 500, 500, mPaint);
canvas.skew(1, 0);//傾斜是按照 tan 1就是45度
mPaint.setColor(Color.BLUE);
canvas.drawRect(0, 0, 500, 500, mPaint);