android中如何顯示圖片的一部分

android中如何顯示圖片的一部分

分類: 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

相關文章
相關標籤/搜索