Android多媒体学习二:检索Android的图片库,并显示

上一篇中实例讲解了Android中的Camera的调用和图片的存储,这篇文章,我们将学习如何检索并显示媒体库中的图片。

 

这里有个问题需要注意,如果你在模拟器已经启动的情况下,push了几张图片到SDCard中,建议将模拟器关了,再重新启动

一下,否则,刚刚添加的图片,是没有办法获取到的。这是因为Android是在系统启动的时候来扫描模拟器上SDCard中多媒体文件的。

 

 

闲话少说,看代码:

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值