我們在自定義 View 的時候,經(jīng)常會重寫 onDraw()
方法來繪制自己想要的效果浓体。下面會介紹該方法中一個重要的類 Canvas
類的一些操作方法泡挺。
繪制各種內(nèi)容
// 文字
canvas.drawText("開始寫字了!",50, 50, mPaint);
// 圓形
canvas.drawCircle(200, 200, 100, mPaint);
// 線條
canvas.drawLine(100, 100, 300, 300, mPaint);
// 橢圓
RectF oval = new RectF(150, 200, 500, 400);
canvas.drawOval(oval, mPaint);
// 矩形
canvas.drawRect(100,100, 200, 200, mPaint);
// 圓角矩形
RectF oval3 = new RectF(80, 260, 200, 300);
canvas.drawRoundRect(oval3, 20, 5, mPaint);
// 點
// 一個點
canvas.drawPoint(60, 390, mPaint);
// 多個點
canvas.drawPoints(new float[]{60,400,65,400,70,400}, mPaint);
// 圖片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
canvas.drawBitmap(bitmap, 200,300, mPaint);
旋轉(zhuǎn)命浴、平移娄猫、縮放操作
// 平移
canvas.translate(100, 50);
//縮放
// 初始原點
canvas.scale(2, 4);
// 可變原點
canvas.scale(2, 4,100,100);
// 旋轉(zhuǎn)
// 默認(rèn)以原點為中心進(jìn)行旋轉(zhuǎn)
canvas.rotate(30);
// 自定義中心進(jìn)行旋轉(zhuǎn)
canvas.rotate(30,100,100);
Canvas 狀態(tài)保存和還原
Canvas 提供了幾個方法生闲,讓我們可以方便的對 Canvas 的狀態(tài)進(jìn)行更改和還原媳溺。
我們在對 Canvas 進(jìn)行平移、旋轉(zhuǎn)碍讯、放大等操作時候悬蔽,可以調(diào)用 save()
方法,將當(dāng)前修改過的 Canvas 狀態(tài)進(jìn)行保存捉兴,調(diào)用 restore()
方法后蝎困,會將 Canvas 還原成最近的一個 save() 的狀態(tài)。
save() 方法還會有一個返回值倍啥,我們也可以調(diào)用 restoreToCount(int saveCount)
方法禾乘,將這個返回值作為參數(shù)傳遞進(jìn)去,就可以將 Canvas 還原成某一個特定的 save() 狀態(tài)虽缕。
canvas.translate(100,100); // 平移(100,100)
int save1 = canvas.save(); // 保存Canvas狀態(tài)(狀態(tài)1)
canvas.scale(2, 2); // 放大2倍
int save2 = canvas.save(); // 保存Canvas狀態(tài)(狀態(tài)2)
canvas.restore(); // 返回最新的save狀態(tài)始藕,即狀態(tài)2
canvas.restoreToCount(save1);// 手動指定的返回到 狀態(tài)1
參考文章:
Android Canvas 方法總結(jié)
本文章只是作為自己學(xué)習(xí)和總結(jié)所用,如有使用不當(dāng)之處可隨時@我,謝謝