浅谈canvas的matrix变换
来源:互联网 发布:九黎影视源码 编辑:程序博客网 时间:2024/06/03 15:32
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
- 浅谈canvas的matrix变换
- 自定义控件(11)---Canvas的平移、旋转、缩放、错切、Matrix直接变换Canvas
- Canvas的图形变换
- canvas的各种变换
- Canvas的变换
- 浅谈矩阵变换——Matrix
- Matrix对称变换的总结
- html5的canvas坐标变换
- 矩阵的基本变换 | Matrix
- canvas变换
- canvas变换
- canvas变换
- 浅谈Canvas的状态绘图
- 对Canvas和Matrix的理解
- 对Canvas和Matrix的理解<一>
- 对Canvas和Matrix的理解<二>
- 对Canvas和Matrix的理解
- 对Canvas和Matrix的理解
- BNU 49103 贪心【二分+贪心】
- onGeolocationPermissionsShowPrompt webview使用内置浏览器定位的权限
- 【响应式web设计(二)】视口(viewport)
- AngularJs在ng-click函数中如何获取代表当前元素的DOM对象
- LeetCode 12. Integer to Roman
- 浅谈canvas的matrix变换
- HDOJ 3339 In Action(最短路+01背包)
- Centos7安装mysql(mariadb)
- iOS开发tips-神奇的UITableView
- SQL数据库调优之性能监视篇
- 图形化界面,如何上传本地代码到Github?
- 【MongoDB】基本的增删改查
- JAVA-经典的基础案例片段
- SLAM