從系統圖庫應用里面選擇一個圖片加載到界面上
1.在布局文件增加一個按鈕
布局文件
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical" > 6 7 <Button 8 android:id="@+id/button1" 9 android:onClick="selectImage" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:text="選擇圖片" /> 13 14 <ImageView 15 android:id="@+id/iv" 16 android:layout_width="fill_parent" 17 android:layout_height="fill_parent" /> 18 19 </LinearLayout>
Activity代碼
1 package cn.itcast.loadimage; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.net.Uri; 6 import android.os.Bundle; 7 import android.view.View; 8 import android.widget.ImageView; 9 10 public class LoadImageActivity extends Activity { 11 private ImageView iv; 12 13 @Override 14 public void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.main); 17 iv = (ImageView) findViewById(R.id.iv); 18 } 19 20 public void selectImage(View view) { 21 // 打開系統的圖庫 獲取一個圖片 22 /* 23 * <intent-filter> <action android:name="android.intent.action.PICK" /> 24 * <category android:name="android.intent.category.DEFAULT" /> <data 25 * android:mimeType="image/*" /> <data android:mimeType="video/*" /> 26 * </intent-filter> 27 */ 28 29 Intent intent = new Intent(); 30 intent.setAction("android.intent.action.PICK"); 31 intent.addCategory("android.intent.category.DEFAULT"); 32 intent.setType("image/*"); 33 startActivityForResult(intent, 0); 34 35 } 36 37 @Override 38 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 39 if (data != null) { 40 // 得到點擊圖片的uri 41 Uri uri = data.getData(); 42 iv.setImageURI(uri); 43 } 44 super.onActivityResult(requestCode, resultCode, data); 45 } 46 }
或者直接通過路徑加載圖片
1 Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/img.JPG"); 2 3 long endtime = System.currentTimeMillis(); 4 long time = endtime - starttime; 5 System.out.println("解析圖片花費了:"+time); 6 iv.setImageBitmap(bitmap);
通過以上代碼可以看出 加載圖片如果比較大是比較耗時的,并且加載多次會有OOM異常
所以我們需要對圖片進行壓縮成縮略圖后顯示,例如系統圖庫 開始加載的圖片是比較模糊的而后一段時間后效果突然就清晰了,性質上也是如此,壓縮圖片代碼如下
1 public void loadImage(View view){ 2 long starttime = System.currentTimeMillis(); 3 //Bitmap bitmap =BitmapFactory.decodeFile("/sdcard/img.JPG"); 4 BitmapFactory.Options opts = new Options(); //定義圖片的解析的參數對象 5 opts.inSampleSize = 8; //按照原圖的1/8進行圖片的解析 6 7 Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/img.JPG", opts); 8 9 long endtime = System.currentTimeMillis(); 10 long time = endtime - starttime; 11 System.out.println("解析圖片花費了:"+time); 12 iv.setImageBitmap(bitmap); 13 } 14

浙公網安備 33010602011771號