Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> android matrix

android matrix

編輯:初級開發

本文將講述如何如何在android中使用Matrix實現圖片的縮放和旋轉,通過本文學習,你將學會如何通過Matrix操作圖像。
代碼示例:
直接上代碼了,我在代碼中附帶了詳細的解釋,代碼如下:
package com.eoeandroid.demo.testcode; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Matrix; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.view.VIEwGroup.LayoutParams; 
import android.widget.ImageVIEw; 
import android.widget.LinearLayout; 
import android.widget.ImageVIEw.ScaleType; 
public class bitmaptest extends Activity { 
public void onCreate(Bundle icicle) { 
        super.onCreate(icicle); 
        setTitle("eoeandroid教程: 縮放和旋轉圖片 -by:IceskYsl"); 
        LinearLayout linLayout = new LinearLayout(this); 
        // 加載需要操作的圖片,這裡是eoeandroid的logo圖片 
        Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
               R.drawable.eoe_android); 
        //獲取這個圖片的寬和高 
        int width = bitmapOrg.getWidth(); 
        int height = bitmapOrg.getHeight(); 
        //定義預轉換成的圖片的寬度和高度 
        int newWidth = 200; 
        int newHeight = 200; 
        //計算縮放率,新尺寸除原始尺寸 
        float scaleWidth = ((float) newWidth) / width; 
        float scaleHeight = ((float) newHeight) / height; 
        // 創建操作圖片用的matrix對象 
        Matrix matrix = new Matrix(); 
        // 縮放圖片動作 
        matrix.postScale(scaleWidth, scaleHeight); 
        //旋轉圖片 動作 
        matrix.postRotate(45); 
        // 創建新的圖片 
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
                          width, height, matrix, true); 
        //將上面創建的Bitmap轉換成Drawable對象,使得其可以使用在ImageVIEw, ImageButton中 
        BitmapDrawable bmd = new BitmapDrawable(resizedBitmap); 
        //創建一個ImageVIEw 
        ImageView imageView = new ImageVIEw(this); 
        // 設置ImageVIEw的圖片為上面轉換的圖片 
        imageVIEw.setImageDrawable(bmd); 
        //將圖片居中顯示 
        imageVIEw.setScaleType(ScaleType.CENTER); 
        //將ImageVIEw添加到布局模板中 
        linLayout.addView(imageVIEw, 
          new LinearLayout.LayoutParams( 
                      LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT 
                ) 
        ); 
        // 設置為本activity的模板 
        setContentVIEw(linLayout); 
    } 

復制代碼
這裡沒用定義XML布局模板,而是直接在代碼中生成了需要的模板和視圖組件,你可以可以定義XML模板,其他原理是一樣的。
在游戲開發中,自定義View是一個相當重要的功能,下面先講一講在VIEw上繪制所需的四個基本主鍵:
Bitmap:用於容納像素點(android.graphics.Bitmap)
Canvas:負責調用繪制方法,是整個過程的入口
要繪制的對象:比如繪制一個Bitmap,矩形或者圓
Paint: 設置繪制圖形的顏色和樣式
Matrix:它包含一個3x3的矩陣,用於做變換匹配(圖像處理中有講),Matrix沒有一個結構體,它必須被初始化,通過實現reset()方法或者set..()方法來實現。
下面來看代碼:
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.VIEw;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
//import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Canvas;
import android.graphics.Paint;
//import android.graphics.Rect;
public class TestMartix extends Activity {
//新建Bitmap,Canvas和Paint
private Bitmap img,r_img;
private Canvas canvas;
private Paint paint;
//由於是自定義vIEw,所以不需要調用Layout文件
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//調用自定義VIEw
setContentView(new MyVIEw(this));
}
public class MyView extends VIEw{
//VIEw的初始化
public MyVIEw(Context context) {
super(context);
//BitmapFactory:從源創建一個Bitmap對象,這些源包括:文件,流或者數組
img = BitmapFactory.decodeResource(getResources(),R.drawable.img);
//新建一個Matrix對象
Matrix matrix = new Matrix();
//讓矩陣實現翻轉,參數為FLOAT型
matrix.postRotate(90);
//matrix.postRotate(0);
//獲取Bitmap的高與寬
int width = img.getWidth();
int height = img.getHeight();
//源Bitmap通過一個Matrix變化後,返回一個不可變的Bitmap
b_img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);
paint = new Paint();
}
//在自定義VIEW時,必須實現此方法
public void onDraw(Canvas canvas){
//在重寫父類的方法時,必須先調用父類的方法
super.onDraw(canvas);
//利用Canvas在VIEw上繪制一個Bitmap,並設置它的樣式和顏色
canvas.drawBitmap(b_img, 10, 10, paint);
//該方法是用來更新VIEw的方法,多與線程結合使用。
//this.invalidate ()
//下面三段代碼用於在VIEw上繪制一個實心矩形,設置顏色為綠色,
//paint.setColor(Color.GREEN);
//paint.setAntiAlias(true);
//canvas.drawRect(new Rect(30,30,100,100), paint);
}

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