資源描述:
《canvas中save和restore使用方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、在創(chuàng)建新的控件或修改現(xiàn)有的控件時,我們都會涉及到重寫控件或View的onDraw方法。onDraw方法會傳入一個Canvas對象,它是你用來繪制控件視覺界面的畫布。在onDraw方法里,我們經(jīng)常會看到調(diào)用save和restore方法,它們到底是干什么用的呢??save:用來保存Canvas的狀態(tài)。save之后,可以調(diào)用Canvas的平移、放縮、旋轉(zhuǎn)、錯切、裁剪等操作。?restore:用來恢復(fù)Canvas之前保存的狀態(tài)。防止save后對Canvas執(zhí)行的操作對后續(xù)的繪制有影響。save和restore要配對使用(restore可以比sa
2、ve少,但不能多),如果restore調(diào)用次數(shù)比save多,會引發(fā)Error。例如:我們先想在畫布上繪制一個右向的三角箭頭,當然,我們可以直接繪制,另外,我們也可以先把畫布旋轉(zhuǎn)90°,畫一個向上的箭頭,然后再旋轉(zhuǎn)回來(這種旋轉(zhuǎn)操作對于畫圓周上的標記非常有用)。然后,我們想在右下角有個20像素的圓,那么,onDraw中的核心代碼是:1intpx=getMeasuredWidth();2intpy=getMeasuredWidth();34//Drawbackground56canvas.drawRect(0,0,px,py,backgro
3、undPaint);78canvas.save();910canvas.rotate(90,px/2,py/2);1112//Drawuparrow1314canvas.drawLine(px/2,0,0,py/2,linePaint);1516canvas.drawLine(px/2,0,px,py/2,linePaint);1718canvas.drawLine(px/2,0,px/2,py,linePaint);1920canvas.restore();2122//Drawcircle2324canvas.drawCircle(p
4、x-10,py-10,10,linePaint);效果如圖1所示:圖1如果我們不調(diào)用save和restore會是什么樣子呢?如圖2所示:圖2從這兩個圖中,我們就能看到圓圈位置的明顯差異。不進行Canvas的save和restore操作的話,所有的圖像都是在畫布旋轉(zhuǎn)90°后的畫布上繪制的。當執(zhí)行完onDraw方法,系統(tǒng)自動將畫布恢復(fù)回來。save和restore操作執(zhí)行的時機不同,就能造成繪制的圖形不同。所以,save和restore之間,往往夾雜的是對Canvas的特殊操作。