android

原创 2015年11月19日 10:37:15

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);    

      }


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android studio Android Monitor介绍一

摘要: Android Monitor 很强大,有5个模块,Memory、Network、logcat、CPU、GPU。现在分5篇文章分别介绍。 一、Memory 这个模块包括4个功能,分...
  • yangaiyu
  • yangaiyu
  • 2017年03月21日 09:40
  • 1751

安卓基础-简单了解位运算(&、|、^、<<、>>)

背景       位运算在安卓中使用很广泛,开发中也许我们使用的比较少,但是当遇到位运算的时候,我们得看得懂。 位运算在安卓中简单使用的例子: 位运算DEMO 接下来,我通过一个简单的...
  • u010052279
  • u010052279
  • 2016年10月10日 13:35
  • 1166

Android单元测试-Mockito

本文为Mockito使用的学习笔记。Mockito概念相关添加 Mockito 依赖 testCompile "org.mockito:mockito-core:2.0.57-beta" Moc...
  • yaodong379
  • yaodong379
  • 2017年03月02日 20:25
  • 563

Android中实现延时执行操作的几种方法

在Android开发中我们可能会有延时执行某个操作的需求,例如我们启动应用的时候,一开始呈现的是一个引导页面,过了两三秒后,会自动跳转到主界面。这就是一个延时操作。 下面是实现延时执行操作的几种方法...
  • mq2856992713
  • mq2856992713
  • 2016年07月23日 16:45
  • 28736

Android中常见正则表达式总结

项目中用到的正则表达式,主要是匹配AndroidManifest文件的,在此做笔记,方便以后查看,后续遇到其他类型的再更新...
  • sophieDJF
  • sophieDJF
  • 2017年08月07日 17:00
  • 559

Android Aop预研

预研目的公司要求,希望我整理一下项目中的log日志,由于当前项目已经很庞大,包含多个自主开发的library,并且由多个开发人员共同完成。不同的同事,打log的方式都不一样,没有同一个的格式,因此我探...
  • kangaroo835127729
  • kangaroo835127729
  • 2016年07月24日 15:26
  • 3626

android的各种用法

android 动画: 一、最原始的四种animation Android的animation由四种类型组成:alpha、scale、translate、rotate XML配置文件...
  • Listron
  • Listron
  • 2016年11月24日 16:17
  • 1173

【Android 开发入门】android studio 控制台打印输出日志

有些情况下,不方便使用断点的方式来调试,而是希望在控制台打印输出日志,使用过Eclipse的同学都知道Java可以使用 System.out.println(""); 来在控制台打印输出日志,但是在a...
  • testcs_dn
  • testcs_dn
  • 2016年12月17日 22:59
  • 22751

Android学习之使用Comparable或Comparator比较和排序元素

Comparable和Comparator都是用来实现集合中元素的比较、排序的。 Comparable是在集合内部定义的方法实现的排序,而Comparator是在集合外部实现的排序,如果想实现排序,就...
  • qq_23940659
  • qq_23940659
  • 2016年03月30日 13:29
  • 6109

android开发之实现动态打勾效果(DrawHookView)

懒惰,只是为了更好的懒惰!
  • zz1175854992
  • zz1175854992
  • 2015年03月05日 09:29
  • 3765
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android
举报原因:
原因补充:

(最多只允许输入30个字)