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).
Canvas里scale, translate, rotate, concat方法都是pre方法,如果要进行更多的变换可以先从canvas获得matrix, 变换后再设置回canvas.