检索Android SDCard的图片,并显示到imagebutton

注意:如果你在模拟器已经启动的情况下,push了几张图片到SDCard中[试过:mnt/sdcard/Picture路径下],建议将模拟器关了,再重新启动一下,否则,刚刚添加的图片,是没有办法获取到的。这是因为Android是在系统启动的时候来扫描模拟器上SDCard中多媒体文件的。


代码:

  1. import android.app.Activity;  
  2. import android.database.Cursor;  
  3. import android.graphics.Bitmap;  
  4. import android.graphics.BitmapFactory;  
  5. import android.os.Bundle;  
  6. import android.provider.MediaStore.Images.Media;  
  7. import android.util.Log;  
  8. import android.view.View;  
  9. import android.widget.ImageButton;  
  10. import android.widget.TextView;  
  11.   
  12. public class PhotoManage extends Activity {  
  13.     private static final float DISPLAY_WIDTH = 200;  
  14.     private static final float DISPLAY_HEIGHT = 200;  
  15.       
  16.     private ImageButton photoView;  
  17.     private TextView nameView;  
  18.     private Cursor cursor;  
  19.       
  20.     private String photoPath;  
  21.     private Bitmap currPhoto;  
  22.       
  23.     //三个变量 用来保存Media.DATA, Media.TITLE,Media.DISPLAY_NAME的索引号,来获取每列的数据   
  24.     private int photoIndex;  
  25.     private int nameIndex;  
  26.       
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.main);  
  31.           
  32.         photoView = (ImageButton)this.findViewById(R.id.image_view);    
  33.         photoView.setOnClickListener(clickListener);    
  34.         nameView = (TextView)this.findViewById(R.id.view_name);   
  35.           
  36.         //指定获取的列     
  37.         String columns[] = new String[]{    
  38.                 Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME    
  39.         };    
  40.         cursor = this.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, columns, nullnullnull);    
  41.         photoIndex = cursor.getColumnIndexOrThrow(Media.DATA);    
  42.         nameIndex = cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME);    
  43.             
  44.         Log.v("HERE First:""First Debug");    
  45.         //显示第一张图片,但是首先要判断一下,Cursor是否有值     
  46.         if(cursor.moveToFirst()){    
  47.             showImage();    
  48.         }    
  49.     }  
  50.       
  51.     private View.OnClickListener clickListener = new View.OnClickListener() {  
  52.           
  53.         @Override  
  54.         public void onClick(View v) {  
  55.             // TODO Auto-generated method stub   
  56.             if(cursor.moveToNext()){  
  57.                 showImage();  
  58.             }  
  59.         }  
  60.     };  
  61.     /** 
  62.      * 显示图像 
  63.      */  
  64.     private void showImage(){  
  65.         photoPath = cursor.getString(photoIndex); //获取图片存储位置   
  66.           
  67.         Log.v("Photo Path:", photoPath);  
  68.         currPhoto = decodeBitmap(photoPath);  
  69.         photoView.setImageBitmap(currPhoto);  
  70.         nameView.setText(cursor.getString(nameIndex));  
  71.     }  
  72.       
  73.     /** 
  74.      * 从path中获取图片信息 
  75.      * @param path 
  76.      * @return 
  77.      */  
  78.     private Bitmap decodeBitmap(String path){  
  79.         BitmapFactory.Options op = new BitmapFactory.Options();    
  80.         op.inJustDecodeBounds = true;    
  81.         Bitmap bmp = BitmapFactory.decodeFile(path, op); //获取尺寸信息     
  82.         //获取比例大小     
  83.         int wRatio = (int)Math.ceil(op.outWidth/DISPLAY_WIDTH);    
  84.         int hRatio = (int)Math.ceil(op.outHeight/DISPLAY_HEIGHT);    
  85.         //如果超出指定大小,则缩小相应的比例     
  86.         if(wRatio > 1 && hRatio > 1){    
  87.             if(wRatio > hRatio){    
  88.                 op.inSampleSize = wRatio;    
  89.             }else{    
  90.                 op.inSampleSize = hRatio;    
  91.             }    
  92.         }    
  93.         op.inJustDecodeBounds = false;    
  94.         bmp = BitmapFactory.decodeFile(path, op);    
  95.         return bmp;    
  96.     }  
  97. }  
main.xml:

  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.     <ImageButton  
  8.         android:id="@+id/image_view"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content" />  
  11.   
  12.     <TextView  
  13.         android:id="@+id/view_name"  
  14.         android:layout_width="fill_parent"  
  15.         android:layout_height="wrap_content" />  
  16.   
  17. </LinearLayout>  

没有更多推荐了,返回首页