Matrix的set,pre,post呼叫順序

2021-09-06 10:22:01 字數 1395 閱讀 4252

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詳解 Matrix怎麼用

在剛才的viewpager練習中,用到了matrix,在這裡再整理一下它的具體用法 1 translate 平移變換 2 scale 縮放變換 3 rotate 旋轉變換 4 skew 錯切變換 在android的api裡對於每一種變換都提供了三種操作方式 set 用於設定matrix中的值 pos...

Matrix使用的分析

在android中,可以使用matrix進行相關的影象處理 如 平移 旋轉 縮放 錯切 對稱等 就拿平移來說吧 1 一般我們要想平移乙個影象,那麼我們先會建立乙個matrix matrix matrix new matrix 2 然後呼叫matrix的平移方法進行平移 matrix.posttran...

matrix 解題報告

我們都知道矩陣乘法 給定兩個矩陣a和b,若a是n r的矩陣,b是r m的矩陣,則a b的結果c是乙個n m的矩陣,且c i,j a i,k b k,j 其中1 k r。很顯然,求出每個c i,j 的過程中,我們都做了r次標量乘法。因此,總的標量乘法次數是n m r。矩陣乘法滿足結合律。換句話說,即使...