Android畫布操作-skew(錯(cuò)切)

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

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