1. 程式人生 > >android Matrix類控制圖片 View的移動、縮放、旋轉、錯切

android Matrix類控制圖片 View的移動、縮放、旋轉、錯切

對圖片或View元件的處理需要使用到Matrix類,Matrix是一個3 x 3的矩陣工具類它對圖片或圖片或View元件的處理分為

Matrix旋轉等操作主要針對圖片的X軸Y軸上面的操作

四個基本型別

1、Translate————平移變換

2、Scale————縮放變換

3、Rotate————旋轉變換

4、Skew————錯切變換

set pre post方法總結
set方法一旦呼叫即會清空之前matrix中的所有變換

後呼叫的pre操作先執行,而後呼叫的post操作則後執行。

我們可以使用pre或者post方法來定義各種變換次序。

在Android的API裡對於每一種變換都提供了三種操作方式
set(用於設定Matrix中的值)post(後乘,根據矩陣的原理,相當於左乘)pre(先乘,相當於矩陣中的右乘)預設時,這四種變換都是圍繞(0,0)點變換的,當然可以自定義圍繞的中心點,通常圍繞中心點。

Translate
首先說說平移,在對圖片處理的過程中,最常用的就是對圖片進行平移操作,該方法為setTranslate,平移意味著在x軸和y軸上簡單地移動影象。setTranslate方法採用兩個浮點數作為引數,表示在每個軸上移動的長度。第一個引數是影象將在x軸上移動的數量,而第二個引數是影象將在y軸上移動的長度。在x軸上使用正數進行平移將向右移動影象,而使用負數將向左移動影象。在y軸上使用正數進行平移將向下移動影象,而使用負數將向上移動影象。

Scale

再看縮放,Matrix類中另一個有用的方法是setScale方法。它採用兩個浮點數作為引數,分別表示在每個軸上所產生的縮放量。第一個引數是x軸的縮放比例,而第二個引數是y軸的縮放比例。如:matrix.setScale(1.5f,1);

Rotate
比較複雜的就是圖片的旋轉了,內建的方法之一是setRotate方法。它採用一個浮點數表示旋轉的角度。圍繞預設點(0,0),正數將順時針旋轉影象,而負數將逆時針旋轉影象,其中預設點是影象的左上角,如:

Matrix matrix = new Matrix();
matrix.setRotate(15);

另外,也可以使用旋轉的角度及圍繞的旋轉點作為引數呼叫setRotate方法
。選擇影象的中心點作為旋轉點,如:
matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2);

Skew
對於錯切變換,在數學上又稱為Shear mapping(可譯為“剪下變換”)或者Transvection(縮並),它是一種比較特殊的線性變換。錯切變換的效果就是讓所有點的x座標(或者y座標)保持不變,而對應的y座標(或者x座標)則按比例發生平移,且平移的大小和該點到x軸(或y軸)的垂直距離成正比。錯切變換,屬於等面積變換,即一個形狀在錯切變換的前後,其面積是相等的。


對於程式中,一個特別有用的方法對是setScale和postTranslate,它們允許跨單個軸(或者兩個軸)翻轉影象。如果以一個負數縮放,那麼會將該影象繪製到座標系統的負值空間。由於(0,0)點位於左上角,使用x軸上的負數會導致向左繪製圖像。因此我們需要使用postTranslate方法,將影象向右移動,如:

matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(),0);

可以在y軸上做同樣的事情,翻轉影象以使其倒置。通過將影象圍繞兩個軸上的中心點旋轉180°,可以實現相同的效果,如
matrix.setScale(1, -1);
matrix.postTranslate(0, bmp.getHeight());