skew之前
首先繪制一個200x200的正方形:
canvas.translate(200, 600);
//畫x軸和y軸
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(2);
canvas.drawLine(0, 0, mWidth, 0, mPaint);
canvas.drawLine(0, 0, 0, mHeight, mPaint);
Rect rect2 = new Rect(0, 0, 200, 200);
canvas.drawRect(rect2, mPaint);
canvas.restore();
image
skew之后
紅線表示對畫布進行操作之前的x、y坐標軸,綠色表示對畫布進行操作之后的x、y坐標軸
將Canvas在x方向上傾斜45度:
/**
* @params sx 將畫布在x方向上傾斜相應(yīng)的角度,sx傾斜角度的tan值,其實就是將y逆時針旋轉(zhuǎn)相應(yīng)的角度
* @params sy 將畫布在y方向上傾斜相應(yīng)的角度,sx傾斜角度的tan值,其實就是將x順時針旋轉(zhuǎn)相應(yīng)的角度
*
* 水平錯切
*/
canvas.skew(1, 0);
canvas.drawRect(rect2, mPaint);
image
將Canvas在y方向上傾斜45度:
canvas.skew(0, 1);
canvas.drawRect(rect2, mPaint);
image
將Canvas在x方向上傾斜45度,在y方向上傾斜60度:
canvas.skew(1, (float) Math.sqrt(3));
canvas.drawRect(rect2, mPaint);
image
小結(jié)
對于skey(float sx,float sy),sx和sy分別表示將畫布在x和y方向上傾斜相應(yīng)的角度對應(yīng)的tan值。
當sx=1時,即將畫布在x方向上旋轉(zhuǎn)45度,其實就是x軸保持方向不變,y軸逆時針旋轉(zhuǎn)45度。
當sy=1時,即將畫布在y方向上旋轉(zhuǎn)45度,其實就是y軸保持方向不變,x軸順時針旋轉(zhuǎn)45度。
當sx、sy都改變時,兩者都進行相應(yīng)的移動。最后一張圖中,將畫布往x方向旋轉(zhuǎn)45端,y方向旋轉(zhuǎn)60度,可見,x軸順時針旋轉(zhuǎn)了60度,y逆時針旋轉(zhuǎn)了45度。