Matrix的set,pre,post呼叫順序

2021-08-07 01:19:22 字數 2445 閱讀 9042

參考:matrix的set,pre,post呼叫順序

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

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

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

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

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

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.prerotate(45);

後執行m.settranslate(80, 80);

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.setscale(interpolatedtime, interpolatedtime);

matrix.pretranslate(-centerx, -centery);

matrix.posttranslate(centerx, centery);

經常在中心縮放的應用中看到這段**.

pretranslate是指在setscale前,平移,

posttranslate是指在setscale後平移

注意他們引數是平移的距離,而不是平移目的地的座標!

由於縮放是以(0,0)為中心的,所以為了把介面的中心與(0,0)對齊,就要pretranslate(-centerx, -centery),

setscale完成後,呼叫posttranslate(centerx, centery),再把移回來,這樣看到的動畫效果就是activity的介面從中心不停的縮放了

注:centerx和centery是介面中心的座標。

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