首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android画布Canvas--save方法和saveLayer方法的区别

Canvas里面牵扯两种坐标系:Canvas自己的坐标系、绘图坐标系,当Canvas画布被创建时,Canvas的坐标系就被创建了,并且此坐标系是固定不变的,就是(0,0)到Canvas的宽高,而我们使用...轴正半轴,往下是Y轴的正半轴,有且只有一个,唯一不变 绘图坐标系 它不是唯一不变的,它与Canvas的Matrix有关系,当Matrix发生改变的时候,绘图坐标系对应的进行改变,同时这个过程是不可逆的(save...方法和saveLayer方法,使得绘图坐标系恢复到保存时的状态 状态栈 save、 restore方法来保存和还原变换操作Matrix以及Clip剪裁 也可以通过restoretoCount直接还原到对应栈的保存状态...离屏缓冲),并且会将saveLayer之前的一些Canvas操作延续过来 后续的绘图操作都在新建的layer上面进行 当我们调用restore 或者 restoreToCount 时 更新到对应的图层和画布上...正因为save方法不会创建图层,所以当我们使用Xfermode,ColorFilter,Alpha时应当使用saveLayer(刮刮卡效果)

2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    VFP一句save将所有改动保存到sql数据库,面向对象不是嘴上说说而已!

    现在有些老狐,嘴巴上说面上面过程写着一条思路写到底,遇山过山,遇水搭桥,说你们面向对象各种七绕八绕太复杂。 又有一些人,嘴上说面向对象是吹牛,但心里想要我告诉他们面向对象开发是怎么回事。...更有一些人,明明想要猫猫讲明白面向对象是咋回事,偏偏要装成大师,做出指点猫猫的样子。 有时候,猫猫兴趣来了,准备讲点面向对象的思想,某些人思维都没有转变,直接说,你说的我都知道,你就直接说怎么做!...Browse 此时这个DAL就实例化成功了,对Employes表进行修改,删除,插入,调用一个save 命令即可以更新到数据库,可以完美配合用户界面层(UI层) oDALCA=Newobject("...DAL_Employees","dal_employees.prg") oDALCA.CursorFill(.T.) replace lastname WITH "5566" oDalCA.save(

    72710

    Android-2D绘图

    防止save后对Canvas执行的操作对后续的绘制有影响。save和restore要配对使用(restore可以比save少,但不能多),如果restore调用次数比save多,会引发Error。...---- save方法:锁定画布 【功能说明】该方法用于锁定画布,这种方法主要用于锁定画布中的某一个或几个对象,对锁定对象操作的场合。...使用save方法锁定画布并完成操作之后,需要使用restore方法解除锁定。 【基本语法】public int save () save方法的具体应用可以参考rotate方法的示例代码。...---- restore方法:解除锁定 【功能说明】该方法用于解除锁定的画布,这种方法主要用在save方法之后。使用save方法锁定画布并完成操作之后,需要使用restore方法解除锁定。...在使用这个方法的时候,将会把画布上的所有对象都旋转。为了只对某一个对象进行旋转,则可以通过save方法锁定画布,然后执行旋转操作,最后通过restore方法解锁,此后再绘制其他图形。

    5.1K20

    探究 canvas 绘图中撤销(undo)功能的实现方式

    restore/save ? 效率最高也是最方便的肯定是查阅 canvas 2D 原生 API 是否有此功能。经过一番搜索,restore/save 这一对 API 进入视线。...我们想要的结果是 save 方法调用后能够保存当前画布的快照,resolve 方法调用后能够完全回到上一个保存的快照处的状态。 再仔细研究一下 API。...好吧,drawImage 操作后对画布的改变根本不存在于绘制状态中。所以,使用 resolve/save 无法实现我们需要的 undo 功能。...给定的矩形图像数据 */ ImageData ctx.getImageData(sx, sy, sw, sh); /* * @param { Object } imagedata 包含像素值的对象...以 drawImage 为比较对象,看 jsperf 上这个测试用例,二者的性能存在数量级的差距。 ? 因此,我们认为此优化方案是可行的。

    2.1K50

    flutter的画布认识

    认识画布的变换和状态 (save/restore)。 [2]. 基础图形的绘制操作:绘制点、绘制线、绘制类矩形、绘制类圆。 [3]. 其他绘制:绘制颜色、绘制画笔、绘制阴影、绘制路径。 [4]....注意: 画布的变换是持久性的,变换之后所有的绘制会在变换后的画布上进行。 变换不是永久性的变换,需要使用状态的存储【save】和恢复【restore】回到之前的画布状态。...当使用 canvas.save() 时,当前画布的状态就会被保存,当执行 canvas.restore() 时,画布就会回到上次保存的状态。...比如:在上面画横线前save画布这时画布的[顶点在屏幕中心],画横线的过程中画布的顶点被[下移到了最后]。 画完后restore画布,就能让画布顶点重新回到[屏幕中心]。...有更巧妙的方法: 如果是相同或者对称的对象,可以通过缩放进行对称变化。

    3.2K30

    Android之Bitmap

    ,不过要注意此时整个画布都缩放了。...();//存储      *        return newb;      *    } 7.Canvas的save和restore onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布...save和restore要配对使用(restore可以比save少,但不能多),如果restore调用次数比save多,会引发Error。...例如:我们先想在画布上绘制一个右向的三角箭头,当然,我们可以直接绘制,另外,我们也可以先把画布旋转90°,画一个向上的箭头,然后再旋转回来(这种旋转操作对于画圆周上的标记非常有用)。...不进行Canvas的save和restore操作的话,所有的图像都是在画布旋转90°后的画布上绘制的。当执行完onDraw方法,系统自动将画布恢复回来。

    83930

    Canvas类的最全面详解 - 自定义View应用系列

    Canvas(); // 方法2 // 通过传入装载画布Bitmap对象创建Canvas对象 // CBitmap上存储所有绘制在Canvas的信息 Canvas canvas = new Canvas...保存当前画布状态(save) 作用:保存画布状态(即保存画布的一系列操作) 应用场景:画布的操作是不可逆的,而且会影响后续的步骤,假如需要回到之前画布的状态去进行下一次操作,就需要对画布的状态进行保存和回滚...public int save (int saveFlags) // saveFlags参数说明: // 1.ALL_SAVE_FLAG(默认):保存全部状态 // 2....CLIP_SAVE_FLAG:保存剪辑区 // 3. CLIP_TO_LAYER_SAVE_FLAG:剪裁区作为图层保存 // 4....(返回值最小为1) 总结 对于画布状态的保存和回滚的套路,一般如下: // 步骤1:保存当前状态 // 把Canvas的当前状态信息入栈 save();

    3.2K81

    Carson带你学Android:自定义View Canvas类使用教程

    / 方法2 // 通过传入装载画布Bitmap对象创建Canvas对象 // CBitmap上存储所有绘制在Canvas的信息 Canvas canvas = new Canvas(bitmap) /...保存当前画布状态(save) 作用:保存画布状态(即保存画布的一系列操作) 应用场景:画布的操作是不可逆的,而且会影响后续的步骤,假如需要回到之前画布的状态去进行下一次操作,就需要对画布的状态进行保存和回滚...public int save (int saveFlags) // saveFlags参数说明: // 1.ALL_SAVE_FLAG(默认):保存全部状态 // 2....CLIP_SAVE_FLAG:保存剪辑区 // 3. CLIP_TO_LAYER_SAVE_FLAG:剪裁区作为图层保存 // 4....(返回值最小为1) 总结 对于画布状态的保存和回滚的套路,一般如下: // 步骤1:保存当前状态 // 把Canvas的当前状态信息入栈 save(); // 步骤2:对画布进行各种操作

    2.4K10

    ​canvas 高级功能(上)

    1.1 画布绘图状态 无论是在现实世界还是画布中,“状态”这个词都是用来描述事物在特定时刻所处的状况。重要的是要抓住与所描述时间直接关联的对象状态。...("2d"); context.fillStyle = "rgb(255, 0, 0)"; context.save(); // 保存画布状态 context.fillRect(50, 50, 100,...在画布中进行平移使用的是translate方法时,实际上它移动的是2D渲染上下文的坐标原点,而不是所绘制的对象。...通过移动2D渲染上下文的原点,画布中的所有对象都将移动相应的距离: context.fillRect(150, 150, 100, 100); context.translate(150, 150);...通俗地说,2D渲染上下文及其绘制的所有对象现在都变成2倍尺寸。 单独使用scale将使所有绘图内容变大,而且它也会使一些对象被画在一些不恰当的位置上。

    2K20

    Canvas基础教程(章节1)

    Canvas 对象的属性 height 属性:   画布的高度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口高度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。...Canvas 动画的制作原理   1、更新绘制的对象(比如位置的移动)   2、清除画布   3、在画布上重新绘制对象   简单一句话概括:不断的绘制与清除。...context.fillStyle = "red"; context.fillRect(10, 10, 100, 100); // 保存状态(红色) context.save...context.fillStyle="blue"; context.fillRect(60, 60, 100, 100); // 保存状态(蓝色) context.save...再次绘制(循环操作) function draw(){ // 不断改变绘制对象的水平位置 x++; // 清除画布 context.clearRect

    1.2K51
    领券