Android canvas平移 縮放 旋轉(zhuǎn) 傾斜 切割 矩陣

translate 平移后原點(0,0)坐標點的位置也會移動

 canvas.drawRect(0,0, 400, 400, mPaint);
 canvas.translate(50, 50);
 mPaint.setColor(Color.GRAY);
 canvas.drawRect(0,0, 400, 400, mPaint);
 canvas.drawLine(0, 0, 600,600, mPaint);
平移.png

scale 縮放

canvas.drawRect(200,200, 700,700, mPaint);
canvas.scale(0.5f, 0.5f);
mPaint.setColor(Color.GRAY);
canvas.drawRect(200,200, 700,700, mPaint);
canvas.drawLine(0,0, 400, 600, mPaint);

rotate 旋轉(zhuǎn)

canvas.translate(50,50);
        canvas.drawRect(0,0, 700,700, mPaint);
        canvas.rotate(45);
        mPaint.setColor(Color.GRAY);
        canvas.drawRect(0,0, 700,700, mPaint);

//以某個中心的坐標選擇
canvas.drawRect(400, 400, 900, 900, mPaint);
        canvas.rotate(45, 650, 650); //px, py表示旋轉(zhuǎn)中心的坐標
        mPaint.setColor(Color.GRAY);
        canvas.drawRect(400, 400, 900, 900, mPaint);

skew 傾斜

        canvas.drawRect(0,0, 400, 400, mPaint);
//        canvas.skew(1, 0); //在X方向傾斜45度,Y軸逆時針旋轉(zhuǎn)45
        canvas.skew(0, 1); //在y方向傾斜45度, X軸順時針旋轉(zhuǎn)45
        mPaint.setColor(Color.GRAY);
        canvas.drawRect(0, 0, 400, 400, mPaint);

clip 切割

//切割所選區(qū)域
        canvas.drawRect(200, 200,700, 700, mPaint);
        mPaint.setColor(Color.GRAY);
        canvas.drawRect(200, 800,700, 1300, mPaint);
        canvas.clipRect(200, 200,700, 700); //畫布被裁剪
        canvas.drawCircle(100,100, 100,mPaint); //坐標超出裁剪區(qū)域,無法繪制
        canvas.drawCircle(300, 300, 100, mPaint); //坐標區(qū)域在裁剪范圍內(nèi),繪制成功

//切割所選以外區(qū)域
        canvas.drawRect(200, 200,700, 700, mPaint);
        mPaint.setColor(Color.GRAY);
        canvas.drawRect(200, 800,700, 1300, mPaint);
        canvas.clipOutRect(200,200,700,700); //畫布裁剪外的區(qū)域
        canvas.drawCircle(100,100,100,mPaint); //坐標區(qū)域在裁剪范圍內(nèi),繪制成功
        canvas.drawCircle(300, 300, 100, mPaint);//坐標超出裁剪區(qū)域,無法繪制

Matrix 矩陣:也可用矩陣做以上操作

        canvas.drawRect(0,0,700,700, mPaint);
        Matrix matrix = new Matrix();
//        matrix.setTranslate(50,50);
//        matrix.setRotate(45);
        matrix.setScale(0.5f, 0.5f);
        canvas.setMatrix(matrix);
        mPaint.setColor(Color.GRAY);
        canvas.drawRect(0,0,700,700, mPaint);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容