post pre set 其实代表了Matrix 中方法变换的次序,pre是向前加入队列执行,post从后面加入队列执行。
举一些例子:
matrix.preScale(2f,1f);
matrix.preTranslate(5f, 0f);
matrix.postScale(0.2f, 1f);
matrix.postTranslate(0.5f, 0f);
方法执行的顺序为:
translate(5, 0) -> scale(2f, 1f) -> scale(0.2f, 1f) -> translate(0.5f, 0f)
而matrix的set方法则会对先前的pre和post操作进行清除,而后再设置它的值,比如下列的方法调用:
matrix.postTranslate(2f, 0f);
matrix.preScale(0.2f, 1f);
matrix.setScale(1f, 1f);
matrix.postScale(5f, 1f);
matrix.preTranslate(0.5f, 0f);
方法执行的顺序为:
translate(0.5f, 0f) -> scale(1f, 1f) ->scale(5f, 1).
【Matrix 中的post 和pre 和set 方法的区别 以及Canvas中的方法】Canvas里scale, translate, rotate, concat方法都是pre方法,如果要进行更多的变换可以先从canvas获得matrix, 变换后再设置回canvas.
推荐阅读
- Android学习笔记|Android ANR
- Android中ViewStub的使用与分析
- Android学习笔记|Chapter3:Gradle依赖管理
- Android学习笔记|Chapter4:与Fragment交互
- Android学习笔记|Chapter1:Gradle基础概念
- Android学习笔记|Chapter2:使用Fragment灵活地构建UI
- Android学习笔记|Chapter2:Android下Gradle的基本自定义构建
- Android学习笔记|EventBus的简单使用方法