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);被清除.
例子二:
Matrix m = new Matrix();m.setTranslate(80, 80);m.postRotate(45);
先執行m.setTranslate(80, 80);后執行m.postRotate(45);
例子三:
Matrix m = new Matrix();m.setTranslate(80, 80);m.preRotate(45);
先執行m.setTranslate(80, 80);后執行m.preRotate(45);
例子四:
Matrix m = new Matrix();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)先執行,因為它查到了隊列的最前端.
例子五:
Matrix m = new Matrix();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);
以上這篇Matrix的set,pre,post調用順序詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。
新聞熱點
疑難解答