天天看點

Matrix的set,pre,post調用順序

Matrix調用一系列set,pre,post方法時,可視為将這些方法插入到一個隊列.當然,按照隊列中從頭至尾的順序調用執行.

其中pre表示在隊頭插入一個方法,post表示在隊尾插入一個方法.而set表示把目前隊列清空,并且總是位于隊列的最中間位置.當執行了一次set後:pre方法總是插入到set前部的隊列的最前面,post方法總是插入到set後部的隊列的最後面

例一:

Matrix m = new Matrix();

m.setRotate(45);

m.setTranslate(80, 80);

隻有m.setTranslate(80, 80)有效,因為m.setRotate(45);被清除.

例子二:

m.postRotate(45);

先執行m.setTranslate(80, 80);後執行m.postRotate(45);

例子三:

m.preRotate(45);

先執行m.preRotate(45);後執行m.setTranslate(80, 80);

例子四:

m.preScale(2f,2f);   

m.preTranslate(50f, 20f);  

m.postScale(0.2f, 0.5f);   

m.postTranslate(20f, 20f); 

執行順序:m.preTranslate(50f, 20f)-->m.preScale(2f,2f)-->m.postScale(0.2f, 0.5f)-->m.postTranslate(20f, 20f)

注意:m.preTranslate(50f, 20f)比m.preScale(2f,2f)先執行,因為它查到了隊列的最前端.

例子五:

m.postTranslate(20, 20);  

m.preScale(0.2f, 0.5f);

m.setScale(0.8f, 0.8f);  

m.postScale(3f, 3f);

m.preTranslate(0.5f, 0.5f);

執行順序:m.preTranslate(0.5f, 0.5f)-->m.setScale(0.8f, 0.8f)-->m.postScale(3f, 3f)

注意:m.setScale(0.8f, 0.8f)清除了前面的m.postTranslate(20, 20)和m.preScale(0.2f, 0.5f);