从系统图库应用里面选择一个图片加载到界面上

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     

 

 

posted @ 2013-01-27 12:15  王世桢  阅读(278)  评论(0编辑  收藏  举报