Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 第94章、圖形變換Matrix(從零開始學Android)

第94章、圖形變換Matrix(從零開始學Android)

編輯:Android技術基礎

Matrix ,翻譯過來是矩陣,大學課程是線性代數有專門介紹,相信大多數人都很頭疼,在圖像處理方面,主要是用於平面的縮放、平移、旋轉等操作。在這裡就體現了學編程為什麼說數學要好了。而我們是入門,就不介紹那麼高深的東東了,你有興趣,自己研究吧。 

Matrix的操作,總共分為translate(平移),rotate(旋轉),scale(縮放)和skew(傾斜)四種,每一種變換在Android的API裡都提供了set, post和pre三種操作方式,除了translate,其他三種操作都可以指定中心點。 
set是直接設置Matrix的值,每次set一次,整個Matrix的數組都會變掉。 
post是後乘,當前的矩陣乘以參數給出的矩陣。可以連續多次使用post,來完成所需的整個變換。例如,要將一個圖片旋轉30度,然後平移到(100,100)的地方,那麼可以這樣做。

[java] view plain copy  
  1. Matrix matrix = new Matrix();       
  2. matrix.postRotate(30);       
  3. matrix.postTranslate(100, 100);   

pre是前乘,參數給出的矩陣乘以當前的矩陣。所以操作是在當前矩陣的最前面發生的。例如上面的例子,如果用pre的話

[java] view plain copy  
  1. Matrix matrix = new Matrix();     
  2. matrix .setTranslate(100, 100);    
  3. matrix .preRotate(30);   

旋轉、縮放和傾斜都可以圍繞一個中心點來進行,如果不指定,默認情況下,是圍繞(0,0)點來進行。

本案例則僅是簡單實現了顯示圖片並將之放大三倍,其它效果你可以隨意試試。

一、設計界面

1、布局文件

我們使用自定義GraphicsView類作為布局,繼承自View。
因此,不需要布局文件。

二、程序文件

1、創建“src/com.genwoxue.matrix/MatrixView.java”文件。
然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.matrix;  
  2.   
  3.   
  4. import android.content.Context;    
  5. import android.content.res.Resources;  
  6. import android.graphics.Bitmap;  
  7. import android.graphics.BitmapFactory;  
  8. import android.graphics.Canvas;  
  9. import android.graphics.Matrix;  
  10. import android.graphics.Paint;  
  11. import android.view.View;  
  12.   
  13.   
  14. public class MatrixView extends View{  
  15.       
  16.     Paint paint=null;  
  17.     Resources src=null;  
  18.     Bitmap bitmap=null;  
  19.       
  20.     public MatrixView(Context context) {     
  21.         super(context);     
  22.           
  23.         /*---------------------------------------------- 
  24.          * 建議盡量把初始化畫筆、資源、位圖不放在onDraw方法中,這是因為: 
  25.          * onDraw經常會運行 到的,不要在裡面new對象,越少越好,不然很浪費內存 
  26.          *--------------------------------------------*/  
  27.           
  28.         //獲取畫筆paint,初始化畫筆  
  29.         paint=new Paint();  
  30.         //獲取資源src  
  31.         src=getResources();  
  32.         // 獲取位圖  
  33.         bitmap=BitmapFactory.decodeResource(src, R.drawable.ic_launcher);  
  34.           
  35.     }    
  36.       
  37.     @Override  
  38.     protected void onDraw(Canvas canvas){  
  39.           
  40.         //顯示位圖  
  41.         canvas.drawBitmap(bitmap,220,220,paint);  
  42.         //初始化Matrix,放大3倍  
  43.         Matrix matrix=new Matrix();  
  44.         matrix.setScale(3f, 3f);  
  45.         //顯示放大3倍的位圖   
  46.         canvas.drawBitmap(bitmap, matrix, null);  
  47.           
  48.     }  
  49. }  

2、創建“src/com.genwoxue.matrix/MainActivity.java”文件。
然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.matrix;  
  2.   
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5.   
  6. public class MainActivity extends Activity {  
  7.   
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.           
  12.         //實例化GraphicsView  
  13.         MatrixView matrixView = new MatrixView(this);   
  14.           
  15.         /* 在以前我們通過setContentView(R.layout.activity_main)顯示布局文件 
  16.          * 本例中使用MatrixView對象matrixView代替以前布局文件 
  17.          */  
  18.         setContentView(matrixView);  
  19.     }  
  20.   
  21. }  

三、配置文件

采用默認生成的“AndroidManifest.xml”文件即可,無需另行配置。

四、運行結果

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved