Android畫布操作-skew(錯切)

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度。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容