Matrix的set,pre,post呼叫順序

2021-07-23 23:28:11 字數 2315 閱讀 5630

matrix主要用於對平面進行平移(translate),縮放(scale),旋轉(rotate)以及斜切(skew)操作。

為簡化矩陣變換,android封裝了一系列方法來進行矩陣變換;其中包括:

1.set系列方法:settranslate,setscale,setrotate,setskew;設定,會覆蓋之前的引數。

2.pre系列方法:pretranslate,prescale,prerotate,preskew;矩陣先乘,如m』 = m * t(dx, dy)。

3.post系列方法:posttranslate,postscale,postrotate,postskew;矩陣後乘,如m』 = t(dx, dy) * m。

matrix裡面就好比維護者乙個雙端佇列

當呼叫pre***方法時,將該方法放入佇列的頂端,(即每來乙個pre***方法就按照**的書寫順序依次放入佇列的頂端)

當呼叫set***方法時,清空當前佇列,(如此說來,在set***之前呼叫的pre***,post***都是無效的)

當呼叫post***方法時,將方法放入佇列的末端,(即每來乙個post***方法就按照**的書寫順序依次放入佇列的頂端)

matrix m = new matrix(); 

m.setrotate(30); - 被覆蓋不執行

m.settranslate(10, 10); -(1)

只有m.settranslate(10, 10)有效,因為m.setrotate(30);被清除.

matrix m = new matrix(); 

m.settranslate(10, 10); -(1)

m.postrotate(30); -(2)

先執行m.settranslate(10, 10);後執行m.postrotate(30);

matrix m = new matrix(); 

m.settranslate(10, 0); -(2)

m.prerotate(30); -(1)

先執行m.prerotate(30);後執行;m.settranslate(10, 10)

matrix m = new matrix(); 

m.prescale(2f,2f); -(2)

m.pretranslate(50f, 20f); -(1)

m.postscale(0.2f, 0.5f); -(3)

m.posttranslate(20f, 20f); -(4)

執行順序: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); -(2)清空了上面的所有操作

m.postscale(3f, 3f); -(3)

m.pretranslate(0.5f, 0.5f); -(1)

執行順序: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。矩陣乘法滿足結合律。換句話說,即使...