android canvas save和restore

首先在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或ViewonDraw方法。

onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。 

onDraw方法里,我们经常会看到很多调用saverestore方法,他们具体是做什么用的,有什么我们需要知道的呢?

 save:用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。

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

    saverestore要配对使用(restore可以比save少,但不能多),如果restore调用次数比save多,会引发Error


下面我们写下代码测试下:

   int px = getMeasuredWidth();
        int py = getMeasuredWidth();

// 背景
        canvas.drawRect(0, 0, px, py, backgroundPaint);

        canvas.save();
        canvas.rotate(90, px/2, py/2);

// 向上的箭头
        canvas.drawLine(px / 2, 0, 0, py / 2, linePaint);
        canvas.drawLine(px / 2, 0, px, py / 2, linePaint);
        canvas.drawLine(px / 2, 0, px / 2, py, linePaint);

        canvas.restore();

// 圆点
        canvas.drawCircle(px - 10, py - 10, 10, linePaint);


那么我们了解下canvas.rotate具体做了什么,这是我开始不理解的地方而且非常重要,看图


顺时针转动90度后


我们需要知道的是坐标系也跟着变了,所以你画的向上的箭头实际上就是向右的

然而ondraw或者restore之后画布会回到之前的状态,但是你之前画的图不会跟着回去了,这点也很重要。


以上,如有错误请指正。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值