skew之前
首先繪制一個(gè)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之后
紅線表示對(duì)畫布進(jìn)行操作之前的x、y坐標(biāo)軸,綠色表示對(duì)畫布進(jìn)行操作之后的x、y坐標(biāo)軸
將Canvas在x方向上傾斜45度:
/**
* @params sx 將畫布在x方向上傾斜相應(yīng)的角度,sx傾斜角度的tan值,其實(shí)就是將y逆時(shí)針旋轉(zhuǎn)相應(yīng)的角度
* @params sy 將畫布在y方向上傾斜相應(yīng)的角度,sx傾斜角度的tan值,其實(shí)就是將x順時(shí)針旋轉(zhuǎn)相應(yīng)的角度
*
* 水平錯(cuò)切
*/
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é)
對(duì)于skey(float sx,float sy),sx和sy分別表示將畫布在x和y方向上傾斜相應(yīng)的角度對(duì)應(yīng)的tan值。
當(dāng)sx=1時(shí),即將畫布在x方向上旋轉(zhuǎn)45度,其實(shí)就是x軸保持方向不變,y軸逆時(shí)針旋轉(zhuǎn)45度。
當(dāng)sy=1時(shí),即將畫布在y方向上旋轉(zhuǎn)45度,其實(shí)就是y軸保持方向不變,x軸順時(shí)針旋轉(zhuǎn)45度。
當(dāng)sx、sy都改變時(shí),兩者都進(jìn)行相應(yīng)的移動(dòng)。最后一張圖中,將畫布往x方向旋轉(zhuǎn)45端,y方向旋轉(zhuǎn)60度,可見(jiàn),x軸順時(shí)針旋轉(zhuǎn)了60度,y逆時(shí)針旋轉(zhuǎn)了45度。