您好,欢迎来到锐游网。
搜索
您的当前位置:首页浅谈canvas的matrix变换

浅谈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.属性动画封装较好的动画可以同时操作多个元素进行动画

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


因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务