惜忆隐蝶

在博客中学习成长,不断提升自己,有意义的东西跟大家分享!

android

canvas.save() canvas.restore() 作用

分类: android

暂时先看此博客,待以后再研究

这里canvas.save();和canvas.restore();是两个相互匹配出现的,作用是用来保存画布的状态和取出保存的状态的。这里稍微解释一下,

  当我们对画布进行旋转,缩放,平移等操作的时候其实我们是想对特定的元素进行操作,比如图片,一个矩形等,但是当你用canvas的方法来进行这些操作的时候,其实是对整个画布进行了操作,那么之后在画布上的元素都会受到影响,所以我们在操作之前调用canvas.save()来保存画布当前的状态,当操作之后取出之前保存过的状态,这样就不会对其他的元素进行影响

对于 canvas.save();和canvas.restore(); 还有不少人不懂,OK、我再补充点:

代码段1:

    public void draw() {   

      Canvas canvas = sfh.lockCanvas();    

      canvas.drawColor(Color.BLACK);  

      canvas.drawBitmap(bmp1, 0,0,paint);  

      canvas.save();   

      canvas.scale(5f, 5f);  

      canvas.restore();   

      canvas.drawBitmap(bmp2, 0,0,paint);  

      sfh.unlockCanvasAndPost(canvas);    

    }  

   

代码段2:

    public void draw() {   

      Canvas canvas = sfh.lockCanvas();    

      canvas.drawColor(Color.BLACK);  

      canvas.drawBitmap(bmp1, 0,0,paint);  

      canvas.scale(5f, 5f);  

      canvas.drawBitmap(bmp2, 0,0,paint);  

      sfh.unlockCanvasAndPost(canvas);    

    }  

上面这两个代码片段中我们都假设有两张图片bmp1和bmp2,并且都画在画布上!

那么代码段1和代码段2的不同:

代码段1中我们进行画布缩放的之前保存了画布状态,做了缩放操作之后又取出之前保存的状态,这样做是为了保证bmp2正常画出来不受到缩放的影响!

代码段2里,画了bmp1后就执行了缩放操作,并且没有保存状态!紧接着画了bmp2,那么bmp2也会一样受到缩放的影响!!

所以我们如果单独处理一张图片的时候,而且不想影响其他部分的绘制,那么应该如下来做:

view plaincopy toclipboardprint?

    public void draw() {   

        Canvas canvas = sfh.lockCanvas();    

        canvas.drawColor(Color.BLACK);  

        canvas.drawBitmap(bmp1, 0,0,paint);  

        canvas.save();   

        canvas.scale(5f, 5f);  

        canvas.drawBitmap(bmp2, 0,0,paint);  

        canvas.restore();   

        sfh.unlockCanvasAndPost(canvas);    

      }


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiyiyindie/article/details/49924255
下一篇路径及文字
想对作者说点什么? 我来说一句

Android MySpinner

2011年06月24日 37KB 下载

ANDROID 相关资源

2011年03月05日 89KB 下载

android demo 20170214

2017年12月04日 4.02MB 下载

android android android android android

2009年12月15日 2.07MB 下载

Android in practice

2016年04月02日 10.08MB 下载

android 反编译

2011年11月10日 686KB 下载

Android 源代码

2011年06月24日 643KB 下载

LInux android adb

2011年10月21日 350KB 下载

android 项目源码

2011年10月16日 176KB 下载

没有更多推荐了,返回首页

关闭
关闭