浅谈canvas的matrix变换

canvas有许多方法可以平移,旋转,缩放其实都是基于matrix来进行变换的

由于matrix方法过于复杂于是便封装了以下方法:

 canvas.scale(0,1);
        canvas.translate(1f,4f);
        canvas.rotate(30);
注意以上三个方法都需要在画图之前调用,即:
 canvas.rotate(30);
        canvas.drawLine(0,0,1f,1f,new Paint());

然后配合save和restore方法来使用

以下展示了如何使用matrix:

 canvas.scale(0.5f,0.5f);
  
 Matrix matrix=canvas.getMatrix();
        matrix.setScale(0.5f,0.5f);
        canvas.setMatrix(matrix);



可是2个方法所展示出来的图形不同因为调用了硬件加速:

即使你直接这样调用:

 Matrix matrix=canvas.getMatrix();
      
        canvas.setMatrix(matrix);
所展现出来的图形任然会不一样:

你需要:

 ;setLayerType(View.LAYER_TYPE_SOFTWARE, null);
取消硬件加速先就可以进行canvas的matrix变换了,matrix的变换的更详细的操作可以看图片的操作都是一样的(需要线性代数知识)

以下提供了三种层面的禁用硬件加速以备不时之需:

window级别

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,   WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 
activity级别:

<activity android:hardwareAccelerated="false" /> </application>
application全局禁用

 <application android:hardwareAccelerated="false">   
view级别

setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

HardwareAccelerated的作用:


当硬件加速被启用时,Android框架会采用一个新的绘图模式,这种模式利用显示列表把应用程序呈现在屏幕上,这样的速度更快

canvas的操作一般有配合动画来操作:

操作一般又可以分为三种操作(自己总结的):

1.scroller配合srollerto实现动画的平移,实现scrollview的类似动画时使用比较方便

2.valueanimotion直接操作单个元素是速度较快

3.属性动画封装较好的动画可以同时操作多个元素进行动画

下一篇将会带来一个属性动画操作多个属性实现动画的实际操作与自定义属性的实现。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值