`

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

 
阅读更多

转自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多媒体构架之前,我们必须先了解Android系统作为一个整体是如何处理多媒体信息的。Android多媒体构架是一套复杂的系统,它涵盖了音频、视频、图形和图像的捕获、处理和播放。本分析报告将侧重于Ice...

    Android多媒体开发高级编程-电子书

    《Android多媒体开发高级编程》是一本深入探讨Android平台多媒体应用开发的专业书籍,旨在帮助开发者提升在Android系统上创建高效、高质量的多媒体应用的能力。PDF格式的电子书版本使得读者可以随时随地进行学习,不...

    Android多媒体编程

    一、Android多媒体框架概述 Android的多媒体框架由多个层次组成,包括硬件抽象层(HAL)、媒体服务层、媒体库以及应用程序接口(API)。这个框架允许开发者以高效且灵活的方式处理多媒体数据。 1. 硬件抽象层:HAL...

    基于android的多媒体程序

    在Android平台上,开发多媒体应用程序是一项常见的任务,它涵盖了音频、视频播放、图像处理以及相机功能等多个方面。...在学习和实践中,理解并熟练运用这些知识点是构建高质量Android多媒体应用程序的关键。

    android简单实现从手机系统库获取图片和视频

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 在Android 6.0(API 23)及以上版本,还需要在运行时动态请求权限: ```java if (ContextCompat.checkSelfPermission(this, ...

    Android多媒体智能综合管理系统.rar

    《Android多媒体智能综合管理系统》 在当今信息化社会中,Android操作系统因其开源、灵活的特性,已经成为全球最受欢迎的移动操作系统之一。随着技术的发展,Android系统在多媒体应用领域也展现了其强大的功能,...

    Java图片管理程序(Android)

    【Java图片管理程序(Android)】是一款基于Java编程语言开发的Android应用程序,专门用于管理和浏览手机中的图片。在Android平台上,开发这样的应用涉及到许多关键技术和组件,这些知识点对于理解和构建类似应用至...

    Android多媒体-视频应用

    在Android平台上,多媒体功能是应用程序开发中的重要组成部分,特别是针对视频的应用。本篇文章将深入探讨Android如何处理视频的录制、播放、存储以及界面优化,帮助开发者构建高效且用户体验优秀的视频应用。 1. ...

    android多媒体综合运用

    4. **图片显示**:Android提供了多种方式显示图片,如`ImageView`控件是最常用的一种。你可以通过`setImageBitmap()`, `setImageResource()`, 或者 `setImageURI()` 方法来设置图片。如果图片位于SD卡,通常会使用`...

    手机本地图片显示

    3. **MediaStore**(Android):这是Android系统中的一个全局内容提供者,用于存储和检索设备上的多媒体文件信息,如图片、音频和视频。通过MediaStore.Images.Media表,我们可以获取到所有图片的元数据。 4. **...

    android usb扫描音视频,并播放

    在Android平台上,开发一个应用程序来扫描USB设备中的音视频文件并进行播放,涉及到多个关键知识点。这个项目"android usb扫描音...通过实现这个项目,开发者可以深入理解Android多媒体框架以及如何与硬件进行交互。

    Android应用程序开发

    #### 八、Android多媒体开发 Android平台支持丰富的多媒体特性,包括: - **音频播放与录制**:通过MediaPlayer、MediaRecorder等类实现。 - **视频播放与录制**:同样通过MediaPlayer和MediaRecorder等类来完成。...

    Android项目-谁是歌手

    开发者可以学习如何创建各种控件(如按钮、文本框、图片视图等)并进行布局管理,如线性布局、相对布局或约束布局。 2. **活动(Activity)管理**:Activity是Android应用的基本单元,负责与用户交互。项目中可能...

    Android入门到精通详解.pdf

    综上所述,《Android入门到精通详解》涵盖了从Android系统的架构、开发工具的使用到应用程序开发的各个环节,以及UI设计和图形处理等内容,为初学者提供了全面的学习指南。无论是想要深入了解Android平台的技术细节...

    Android MediaStore检索视频

    在Android开发中,MediaStore是系统提供的一种接口,用于访问设备上的多媒体数据,包括图片、音频和视频。本文将深入探讨如何使用MediaStore检索SD卡上的视频,并展示在ListView中,以及实现点击列表项后播放视频的...

    android'开发帮助文档,Android+API,学习指南

    在Android开发过程中,掌握API和相关学习指南是至关重要的。这份"android开发帮助文档"包含了Android API和开发指南的离线版本,对于开发者来说是一份非常实用的资源。以下是这份文档可能涵盖的主要知识点: 1. **...

    android美女电子相册

    6. **多媒体支持**:Android的MediaStore API可以方便地访问设备上的图片和视频。通过ContentResolver和Cursor,可以检索到用户的媒体库,并将它们添加到相册中。 7. **权限管理**:Android 6.0及以上版本引入了...

    android学习小项目

    在Android学习过程中,小项目是提升技能和理解平台工作原理的有效途径。这些小项目不仅可以帮助初学者巩固基础知识,还能让有经验的开发者拓展视野。在这个名为"android学习小项目"的压缩包中,包含了10几个实用的...

Global site tag (gtag.js) - Google Analytics