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

在android應用程序中加載一張圖片,然後把它顯示出來這是一件非常容易的事情,那怎麼才能顯示一張圖片的一小部分呢,一種做法是把圖片ps一下,要顯示的那部分單獨存成一張圖片,然後程序中加載它,並把它顯示出來。但這樣會增加程序的圖片量。對一張完整的圖,用程序去切割你想要的那部分也是很簡單的。

下面實現的一個程序,是加載瞭一張圖片,然後經過變換讓圖片填充到手機的整個屏幕,然後在屏幕的中間顯示圖片中間的100*100的部分。

ShowPoritionPictureActivity代碼:

 

[java] <span style="font-size:16px;">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); 
    } 
</span> 
<span style="font-size:16px;">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);
        // 得到圖片的長和寬 www.aiwalls.com
        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);
    }
</span>

 

   新建PoritionView類代碼:

 

[java] <span style="font-size:16px;">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; 
    } 

</span> 
<span style="font-size:16px;">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;
 }
}
</span>

 

 

在工程res/drawable裡面添加圖片gir.png,運行程序的效果是隻顯示圖片的中間100*100的那部分圖片。

 
摘自 北京大學-Google Android實驗室

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。