从系统图库应用里面选择一个图片加载到界面上
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