Android中canvas.save()和canvas.restore()的使用

來源:互聯網
上載者:User

標籤:android   canvas   save   restore   

自訂控制項時常常遇到重寫View的Ondraw()方法,Ondraw()方法常常設計到save()和restore()這兩個方法.這兩個相互匹配出現的,作用是用來儲存畫布的狀態和取出儲存的狀態的。具體作用如下:

1.save():用來儲存Canvas的狀態,save()方法之後的代碼,可以調用Canvas的平移、放縮、旋轉、裁剪等操作!

2.restore():用來恢複Canvas之前儲存的狀態,防止save()方法代碼之後對Canvas執行的操作,繼續對後續的繪製會產生影響,通過該方法可以避免連帶的影響!

下面簡單舉個例子,說明一下,先來看第一段代碼:

private class DemoView extends View {private Paint mPaint;private Bitmap bitmap1;private Bitmap bitmap2;public DemoView(Context context) {super(context);mPaint = new Paint();bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.a);bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.b);}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawBitmap(bitmap1, 0, 0, mPaint);canvas.scale(5f, 5f);canvas.drawBitmap(bitmap2, 30, 30, mPaint);super.onDraw(canvas);}}
很簡單的樣本,就是畫了兩個圖片,並且在第一個畫完後,把畫布放大了5倍,效果:


下面,我們把代碼稍作改動,如下:

private class DemoView extends View {private Paint mPaint;private Bitmap bitmap1;private Bitmap bitmap2;public DemoView(Context context) {super(context);mPaint = new Paint();bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.a);bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.b);}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawBitmap(bitmap1, 0, 0, mPaint);canvas.save();//儲存canvas.scale(5f, 5f);canvas.restore();//恢複canvas.drawBitmap(bitmap2, 30, 30, mPaint);super.onDraw(canvas);}}
效果如下:


這樣是不是效果對比很明顯了。

簡述一下兩個的不同吧:

1.第一段代碼中畫了bmp1後就執行了縮放操作,並且沒有儲存狀態!緊接著畫了bmp2,那麼bmp2也會一樣受到縮放的影響!!

2.第二段代碼中我們進行畫布縮放的之前儲存了畫布狀態,做了縮放操作之後又取出之前儲存的狀態,這樣做是為了保證bmp2正常畫出來不受到縮放的影響!

嗯,貌似是看懂了,不知道你懂了沒~


Android中canvas.save()和canvas.restore()的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.