分類: Android應用開發系列教程 Android應用開發技巧 2012-04-25 23:42 1728人閱讀 評論(0) 收藏 舉報java
androidmatrixfloatconstructorclassnullandroid
做者:張宗碩 canvas
在android應用程序中加載一張圖片,而後把它顯示出來這是一件很是容易的事情,那怎麼才能顯示一張圖片的一小部分呢,一種作法是把圖片ps一下,要顯示的那部分單獨存成一張圖片,而後程序中加載它,並把它顯示出來。但這樣會增長程序的圖片量。對一張完整的圖,用程序去切割你想要的那部分也是很簡單的。app
下面實現的一個程序,是加載了一張圖片,而後通過變換讓圖片填充到手機的整個屏幕,而後在屏幕的中間顯示圖片中間的100*100的部分。ide
ShowPoritionPictureActivity代碼:post
package com.iwin.zzs; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.WindowManager; public class ShowPoritionPictureActivity extends Activity { /** Called when the activity is first created. */ Bitmap picRes; Bitmap showPic; //獲取原圖片的寬和高 int picWidth; int picHeight; private PoritionView poritonView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 不顯示狀態欄 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); DisplayMetrics dm = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(dm); // 獲得屏幕的長和寬 int screenWidth = dm.widthPixels; //水平分辨率 int screenHeight = dm.heightPixels; //垂直分辨率 picRes = BitmapFactory.decodeResource(this.getResources(), R.drawable.girl); // 獲得圖片的長和寬 picWidth = picRes.getWidth(); picHeight = picRes.getHeight(); // 計算縮放率,新尺寸除原始尺寸 float scaleWidth = ((float) screenWidth ) / picWidth; float scaleHeight = ((float) screenHeight ) / picHeight; // 建立操做圖片用的matrix對象 Matrix matrix = new Matrix(); // 縮放圖片動做 matrix.postScale(scaleWidth, scaleHeight); // 新獲得的圖片是原圖片通過變換填充到整個屏幕的圖片 Bitmap picNewRes = Bitmap.createBitmap(picRes, 0, 0,picWidth, picHeight, matrix, true); // bitmap = Bitmap.createBitmap(400, 480, Bitmap.Config.ARGB_8888); // canvas=new Canvas(); // canvas.setBitmap(bitmap); showPic = Bitmap.createBitmap(picNewRes, screenWidth/2-50, screenHeight/2-50, 100, 100); poritonView = new PoritionView(this); poritonView.setBitmapShow(showPic, screenWidth/2-50, screenHeight/2-50); setContentView(poritonView); }
新建PoritionView類代碼:this
package com.iwin.zzs; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.view.View; public class PoritionView extends View { private Bitmap showPic = null; private int startX = 0; private int startY = 0; public PoritionView(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawBitmap(showPic, startX, startY, null); } public void setBitmapShow(Bitmap b, int x, int y) { showPic = b; startX = x; startY = y; } }
在工程res/drawable裏面添加圖片gir.png,運行程序的效果是隻顯示圖片的中間100*100的那部分圖片。spa