本文將講述如何如何在Android中使用Matrix實現(xiàn)圖片的縮放和旋轉(zhuǎn),,通過本文學(xué)習(xí),,你將學(xué)會如何通過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教程: 縮放和旋轉(zhuǎn)圖片 -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(); //定義預(yù)轉(zhuǎn)換成的圖片的寬度和高度 int newWidth = 200; int newHeight = 200; //計算縮放率,,新尺寸除原始尺寸 float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 創(chuàng)建操作圖片用的matrix對象 Matrix matrix = new Matrix(); // 縮放圖片動作 matrix.postScale(scaleWidth, scaleHeight); //旋轉(zhuǎn)圖片 動作 matrix.postRotate(45); // 創(chuàng)建新的圖片 Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width, height, matrix, true); //將上面創(chuàng)建的Bitmap轉(zhuǎn)換成Drawable對象,,使得其可以使用在ImageView, ImageButton中 BitmapDrawable bmd = new BitmapDrawable(resizedBitmap); //創(chuàng)建一個ImageView ImageView imageView = new ImageView(this); // 設(shè)置ImageView的圖片為上面轉(zhuǎn)換的圖片 imageView.setImageDrawable(bmd); //將圖片居中顯示 imageView.setScaleType(ScaleType.CENTER); //將ImageView添加到布局模板中 linLayout.addView(imageView, new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT ) ); // 設(shè)置為本activity的模板 setContentView(linLayout); } } 復(fù)制代碼 這里沒用定義XML布局模板,而是直接在代碼中生成了需要的模板和視圖組件,你可以可以定義XML模板,,其他原理是一樣的,。 在游戲開發(fā)中,自定義View是一個相當(dāng)重要的功能,,下面先講一講在View上繪制所需的四個基本主鍵: Bitmap:用于容納像素點(android.graphics.Bitmap) Canvas:負責(zé)調(diào)用繪制方法,,是整個過程的入口 要繪制的對象:比如繪制一個Bitmap,矩形或者圓 Paint: 設(shè)置繪制圖形的顏色和樣式 Matrix:它包含一個3x3的矩陣,用于做變換匹配(圖像處理中有講),,Matrix沒有一個結(jié)構(gòu)體,,它必須被初始化,通過實現(xiàn)reset()方法或者set..()方法來實現(xiàn),。 下面來看代碼: 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,所以不需要調(diào)用Layout文件 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //調(diào)用自定義View setContentView(new MyView(this)); } public class MyView extends View{ //View的初始化 public MyView(Context context) { super(context); //BitmapFactory:從源創(chuàng)建一個Bitmap對象,,這些源包括:文件,流或者數(shù)組 img = BitmapFactory.decodeResource(getResources(),R.drawable.img); //新建一個Matrix對象 Matrix matrix = new Matrix(); //讓矩陣實現(xiàn)翻轉(zhuǎn),,參數(shù)為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時,必須實現(xiàn)此方法 public void onDraw(Canvas canvas){ //在重寫父類的方法時,,必須先調(diào)用父類的方法 super.onDraw(canvas); //利用Canvas在View上繪制一個Bitmap,,并設(shè)置它的樣式和顏色 canvas.drawBitmap(b_img, 10, 10, paint); //該方法是用來更新View的方法,多與線程結(jié)合使用,。 //this.invalidate () //下面三段代碼用于在View上繪制一個實心矩形,,設(shè)置顏色為綠色, //paint.setColor(Color.GREEN); //paint.setAntiAlias(true); //canvas.drawRect(new Rect(30,30,100,100), paint); } } } |
|