Canvas中svae()与restore()的使用

  1. 在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或View的onDraw方法。onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。

  2. 在onDraw方法里,我们经常会看到调用save和restore方法,它们到底是干什么用的呢?

  3. Canvas.save():用来保存Canvas的状态。(Canvas的壮态是指可以调用Canvas相应的方法对Canvas进行平移、放缩、旋转、错切、裁剪等操作的)。

  4. Canvas.restore():用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。   

  5. save和restore要配对使用(restore可以比save少,但不能多),如果restore调用次数比save多,会引发Error。 在读Android SDK里面的samples里面游戏的时候,很多时候都看到对canvas的save()和restore()运用。下面是onDraw函数中的代码片段,使得旋转红色方块的时候,保证蓝色方块不受影响。

  6.    Paint mPaint new Paint();    
  7.  mPaint.setColor(Color.BLUE);    
  8.  canvas.drawRect(100200200300mPaint);    
  9.  canvas.save();  //注释1  
  10.  canvas.rotate(45);    
  11.  mPaint.setColor(Color.RED);    
  12.  canvas.drawRect(1501020060mPaint);    
  13.  canvas.restore(); //注释2      
  14.  mPaint.setColor(Color.GREEN);     
  15.  canvas.drawRect(20010250100mPaint);
  16. 如果上面的代码,注释1和注释2部分的代码被注释的话,那么最后一次画的绿色方块一样会被旋转,而使用了注释1、注释2的话,绿色的方块就不会被旋转了

(完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值