转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以便以后学习和查询!
上一篇中实例讲解了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;
}
}
转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以
便以后学习和查询!
学习总结:
1、默认保存图片的sdcard的URI是:Media.EXTERNAL_CONTENT_URI
2、保存图片的URI中常用的columns有
Media.DATA, //图片的路径
Media._ID,//图片的ID
Media.TITLE,//图片的标题
Media.DISPLAY_NAME //图片的描述
3、要按比例显示图片,需要知道原始图片的大小
BitmapFactory.Options op = new BitmapFactory.Options();
op.inJustDecodeBounds = true; //设置为调试图片范围(这个值必须设置)
//把图片的信息付给了BitmapFactory.Options,同时包括宽和高
Bitmap bmp = BitmapFactory.decodeFile(path, op);
4、设置缩放比例
//获取比例大小
int wRatio = (int)Math.ceil(op.outWidth/DISPLAY_WIDTH);
int hRatio = (int)Math.ceil(op.outHeight/DISPLAY_HEIGHT);
//如果超出指定大小,则缩小相应的比例
if(wRatio > 1 && hRatio > 1){
op.inSampleSize = Math.max(wRatio,hRatio);
}
5、实现图片对象获取
//这个值与前面的 op.inJustDecodeBounds = true;对应
//设置为不是调试图片范围
op.inJustDecodeBounds = false;
//创建图片对象
bmp = BitmapFactory.decodeFile(path, op);
分享到:
相关推荐
这些例子将涵盖从基础的图像显示到复杂的视频处理,以及从简单的动画效果到高级的照相功能,是学习Android多媒体开发的宝贵资源。通过不断实践和学习,开发者能够创建出具有吸引力且功能丰富的Android应用程序。
在深入分析Android多媒体构架之前,我们必须先了解Android系统作为一个整体是如何处理多媒体信息的。Android多媒体构架是一套复杂的系统,它涵盖了音频、视频、图形和图像的捕获、处理和播放。本分析报告将侧重于Ice...
《Android多媒体开发高级编程》是一本深入探讨Android平台多媒体应用开发的专业书籍,旨在帮助开发者提升在Android系统上创建高效、高质量的多媒体应用的能力。PDF格式的电子书版本使得读者可以随时随地进行学习,不...
一、Android多媒体框架概述 Android的多媒体框架由多个层次组成,包括硬件抽象层(HAL)、媒体服务层、媒体库以及应用程序接口(API)。这个框架允许开发者以高效且灵活的方式处理多媒体数据。 1. 硬件抽象层:HAL...
在Android平台上,开发多媒体应用程序是一项常见的任务,它涵盖了音频、视频播放、图像处理以及相机功能等多个方面。...在学习和实践中,理解并熟练运用这些知识点是构建高质量Android多媒体应用程序的关键。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 在Android 6.0(API 23)及以上版本,还需要在运行时动态请求权限: ```java if (ContextCompat.checkSelfPermission(this, ...
《Android多媒体智能综合管理系统》 在当今信息化社会中,Android操作系统因其开源、灵活的特性,已经成为全球最受欢迎的移动操作系统之一。随着技术的发展,Android系统在多媒体应用领域也展现了其强大的功能,...
【Java图片管理程序(Android)】是一款基于Java编程语言开发的Android应用程序,专门用于管理和浏览手机中的图片。在Android平台上,开发这样的应用涉及到许多关键技术和组件,这些知识点对于理解和构建类似应用至...
在Android平台上,多媒体功能是应用程序开发中的重要组成部分,特别是针对视频的应用。本篇文章将深入探讨Android如何处理视频的录制、播放、存储以及界面优化,帮助开发者构建高效且用户体验优秀的视频应用。 1. ...
4. **图片显示**:Android提供了多种方式显示图片,如`ImageView`控件是最常用的一种。你可以通过`setImageBitmap()`, `setImageResource()`, 或者 `setImageURI()` 方法来设置图片。如果图片位于SD卡,通常会使用`...
3. **MediaStore**(Android):这是Android系统中的一个全局内容提供者,用于存储和检索设备上的多媒体文件信息,如图片、音频和视频。通过MediaStore.Images.Media表,我们可以获取到所有图片的元数据。 4. **...
在Android平台上,开发一个应用程序来扫描USB设备中的音视频文件并进行播放,涉及到多个关键知识点。这个项目"android usb扫描音...通过实现这个项目,开发者可以深入理解Android多媒体框架以及如何与硬件进行交互。
#### 八、Android多媒体开发 Android平台支持丰富的多媒体特性,包括: - **音频播放与录制**:通过MediaPlayer、MediaRecorder等类实现。 - **视频播放与录制**:同样通过MediaPlayer和MediaRecorder等类来完成。...
开发者可以学习如何创建各种控件(如按钮、文本框、图片视图等)并进行布局管理,如线性布局、相对布局或约束布局。 2. **活动(Activity)管理**:Activity是Android应用的基本单元,负责与用户交互。项目中可能...
综上所述,《Android入门到精通详解》涵盖了从Android系统的架构、开发工具的使用到应用程序开发的各个环节,以及UI设计和图形处理等内容,为初学者提供了全面的学习指南。无论是想要深入了解Android平台的技术细节...
在Android开发中,MediaStore是系统提供的一种接口,用于访问设备上的多媒体数据,包括图片、音频和视频。本文将深入探讨如何使用MediaStore检索SD卡上的视频,并展示在ListView中,以及实现点击列表项后播放视频的...
在Android开发过程中,掌握API和相关学习指南是至关重要的。这份"android开发帮助文档"包含了Android API和开发指南的离线版本,对于开发者来说是一份非常实用的资源。以下是这份文档可能涵盖的主要知识点: 1. **...
6. **多媒体支持**:Android的MediaStore API可以方便地访问设备上的图片和视频。通过ContentResolver和Cursor,可以检索到用户的媒体库,并将它们添加到相册中。 7. **权限管理**:Android 6.0及以上版本引入了...
在Android学习过程中,小项目是提升技能和理解平台工作原理的有效途径。这些小项目不仅可以帮助初学者巩固基础知识,还能让有经验的开发者拓展视野。在这个名为"android学习小项目"的压缩包中,包含了10几个实用的...