1. 程式人生 > >Android從相簿中選擇圖片顯示出來

Android從相簿中選擇圖片顯示出來

下面的兩篇部落格我是選擇其中的一部分使用的。大家可以自己試試。

第一篇:http://blog.csdn.net/jackyguo1992/article/details/26729107

一、選擇圖片

定義Intent跳轉到特定相簿的Uri下挑選,然後將挑選結果返回給Activity

用到startActivityForResult

  1. Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);  
  2. startActivityForResult(intent, RESULT);  
然後在onActivityForResult儲存

二、圖片縮放

這裡講的很詳細

照它所說有3種方法:

第一種是BitmapFactory和BitmapFactory.Options,同比例縮放,但是效率高

第二種是使用Bitmap加Matrix來縮放,能夠不同比例,但是效率低

第三種是用2.2新加的類ThumbnailUtils來做,這方法不懂,好複雜。。

我用第一種,將圖片放在Imageview中

  1. privatevoid showPhoto(ImageView photo){  
  2.     String picturePath = target.getInfo(Target.TargetPhotoPath);// 圖片的uri
  3.     if(picturePath.equals(""))  
  4.         return;  
  5.     // 縮放圖片, width, height 按相同比例縮放圖片
  6.        BitmapFactory.Options options = new BitmapFactory.Options();  
  7.        // options 設為true時,構造出的bitmap沒有圖片,只有一些長寬等配置資訊,但比較快,設為false時,才有圖片
  8.        options.inJustDecodeBounds = true;  
  9.        Bitmap bitmap = BitmapFactory.decodeFile(picturePath, options);  
  10.        int scale = (int)( options.outWidth / (float)300);  
  11.        if(scale <= 0)  
  12.         scale = 1;  
  13.        options.inSampleSize = scale;  
  14.        options.inJustDecodeBounds = false;  
  15.        bitmap = BitmapFactory.decodeFile(picturePath, options);  
  16.        photo.setImageBitmap(bitmap);  
  17.        photo.setMaxHeight(350);  
  18. }  

三、程式碼

  1. publicclass RemindActivity extends Activity {  
  2.     private ImageView photo;  
  3.     privatestaticfinalint RESULT = 1;  
  4.     Target target;  
  5.     @Override
  6.     protectedvoid onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_remind);  
  9.         photo = (ImageView)findViewById(R.id.photo);  
  10.         target = new Target(this);  
  11.         showPhoto(photo);  
  12.         photo.setOnClickListener(new OnClickListener(){  
  13.             @Override
  14.             publicvoid onClick(View arg0) {  
  15.                 // TODO Auto-generated method stub
  16.                 Dialog dialog = new AlertDialog.Builder(RemindActivity.this)  
  17.                 .setTitle("從相簿裡選擇照片").setMessage("確定要更換照片?").setPositiveButton("確定",   
  18.                         new DialogInterface.OnClickListener() {  
  19.                             @Override
  20.                             publicvoid onClick(DialogInterface dialog, int which) {  
  21.                                 // TODO Auto-generated method stub
  22.                                 Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);  
  23.                                 startActivityForResult(intent, RESULT);  
  24.                             }  
  25.                         }).setNegativeButton("取消"new DialogInterface.OnClickListener() {  
  26.                             @Override
  27.                             publicvoid onClick(DialogInterface dialog, int which) {  
  28.                                 // TODO Auto-generated method stub
  29.                                 dialog.cancel();  
  30.                             }  
  31.                         }).create();  
  32.                 dialog.show();  
  33.             }  
  34.         });  
  35.     }  
  36.     @Override
  37.     protectedvoid onActivityResult(int requestCode, int resultCode, Intent data) {  
  38.         // TODO Auto-generated method stub
  39.         super.onActivityResult(requestCode, resultCode, data);  
  40.         if(requestCode == RESULT && resultCode == RESULT_OK && data != null){  
  41.             Uri selectedImage = data.getData();  
  42.             String[] filePathColumn = { MediaStore.Images.Media.DATA };  
  43.             Cursor cursor = getContentResolver().query(selectedImage,  
  44.                     filePathColumn, nullnullnull);  
  45.             cursor.moveToFirst();  
  46.             int columnIndex = cursor.getColumnIndex(filePathColumn[0]);  
  47.             String picturePath = cursor.getString(columnIndex);  
  48.             cursor.close();  
  49.             target.setInfo(Target.TargetPhotoPath, picturePath);  
  50.             showPhoto(photo);  
  51.         }  
  52.     }  
  53.     privatevoid showPhoto(ImageView photo){  
  54.         String picturePath = target.getInfo(Target.TargetPhotoPath);  
  55.         if(picturePath.equals(""))  
  56.             return;  
  57.         // 縮放圖片, width, height 按相同比例縮放圖片
  58.         BitmapFactory.Options options = new BitmapFactory.Options();  
  59.         // options 設為true時,構造出的bitmap沒有圖片,只有一些長寬等配置資訊,但比較快,設為false時,才有圖片
  60.         options.inJustDecodeBounds = true;  
  61.         Bitmap bitmap = BitmapFactory.decodeFile(picturePath, options);  
  62.         int scale = (int)( options.outWidth / (float)300);  
  63.         if(scale <= 0)  
  64.             scale = 1;  
  65.         options.inSampleSize = scale;  
  66.         options.inJustDecodeBounds = false;  
  67.         bitmap = BitmapFactory.decodeFile(picturePath, options);  
  68.         photo.setImageBitmap(bitmap);  
  69.         photo.setMaxHeight(350);  
  70.     }  
第二篇地址:http://www.oschina.net/question/234345_40138
public class Lesson_01_Pic extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button button = (Button)findViewById(R.id.b01);
        button.setText("選擇圖片");
        button.setOnClickListener(new Button.OnClickListener(){
			@Override
			public void onClick(View v) {
			 	Intent intent = new Intent();
		        /* 開啟Pictures畫面Type設定為image */
		        intent.setType("image/*");
		        /* 使用Intent.ACTION_GET_CONTENT這個Action */
		        intent.setAction(Intent.ACTION_GET_CONTENT); 
		        /* 取得相片後返回本畫面 */
		        startActivityForResult(intent, 1);
			}
        	
        });
    }
    
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == RESULT_OK) {
			Uri uri = data.getData();
			Log.e("uri", uri.toString());
			ContentResolver cr = this.getContentResolver();
			try {
				Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
				ImageView imageView = (ImageView) findViewById(R.id.iv01);
				/* 將Bitmap設定到ImageView */
				imageView.setImageBitmap(bitmap);
			} catch (FileNotFoundException e) {
				Log.e("Exception", e.getMessage(),e);
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
}