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

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

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

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

闲话少说,看代码:

package demo.camera; import android.app.Activity; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.provider.MediaStore.Images.Media; import android.util.Log; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; /** * 该类完成图片的检索,显示功能 * @author Administrator * */ public class PhotoManager extends Activity { public static final float DISPLAY_WIDTH = 200; public static final float DISPLAY_HEIGHT = 200; //这里采用ImageButton的原因是有Button的作用 private ImageButton photoView; private TextView nameView; private Cursor cursor; private String photoPath; //存放某张图片对应的位置信息 private Bitmap currPhoto; //这三个变量主要用来保存Media.DATA,Media.TITLE,Media.DISPLAY_NAME的索引号,来获取每列的数据 private int photoIndex; //private int titleIndex; private int nameIndex; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.photo_view); photoView = (ImageButton)this.findViewById(R.id.image_view); photoView.setOnClickListener(clickListener); nameView = (TextView)this.findViewById(R.id.view_name); //指定获取的列 String columns[] = new String[]{ Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME }; //cursor = this.managedQuery(Media.EXTERNAL_CONTENT_URI, columns, null, null, null); cursor = this.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, columns, null, null, null); photoIndex = cursor.getColumnIndexOrThrow(Media.DATA); //titleIndex = cursor.getColumnIndexOrThrow(Media.TITLE); nameIndex = cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME); Log.v("HERE First:", "First Debug"); //显示第一张图片,但是首先要判断一下,Cursor是否有值 if(cursor.moveToFirst()){ showImage(); } } private View.OnClickListener clickListener = new View.OnClickListener() { @Override public void onClick(View v) { if(cursor.moveToNext()){ showImage(); } } }; /** * 显示图像信息 */ private void showImage(){ photoPath = cursor.getString(photoIndex); //这里获取到的就是图片存储的位置信息 //这里怎样获取图片呢?看decodeBitmap Log.v("Photo Path:", photoPath); currPhoto = decodeBitmap(photoPath); photoView.setImageBitmap(currPhoto); nameView.setText(cursor.getString(nameIndex)); } /** * 从path中获取图片信息 * @param path * @return */ private Bitmap decodeBitmap(String path){ BitmapFactory.Options op = new BitmapFactory.Options(); op.inJustDecodeBounds = true; Bitmap bmp = BitmapFactory.decodeFile(path, op); //获取尺寸信息 //获取比例大小 int wRatio = (int)Math.ceil(op.outWidth/DISPLAY_WIDTH); int hRatio = (int)Math.ceil(op.outHeight/DISPLAY_HEIGHT); //如果超出指定大小,则缩小相应的比例 if(wRatio > 1 && hRatio > 1){ if(wRatio > hRatio){ op.inSampleSize = wRatio; }else{ op.inSampleSize = hRatio; } } op.inJustDecodeBounds = false; bmp = BitmapFactory.decodeFile(path, op); return bmp; } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值