返回

资料详情(天天资源网)

资料简介

Lesson3 媒体播放器 第二阶段 课堂回顾 1. 如何让控件动起来? 2. 自定义控件的原理 3. 自定义属性的两种方法 4. 实现音量控件 多媒体简介  多媒体是计算机和视频技术的结合,实际 上它是两个媒体:声音和图像  音频和视频的播放,我们都会用到 MediaPlayer这个类进行播放 从源文件中播放 1,在项目的res/raw目录下,放置一个 android支持的多媒体文件,如MP3,会 在R文件中生成对应的索引 2,通过MediaPlayer.create(this, R.id.et_mp3)创建一个文件 3,使用start播放 核心代码 mediaplayer = MediaPlayer.create(this, R.raw.music02); try { mediaplayer.start(); } catch (IllegalStateException e) { e.printStackTrace(); } 注:将muisc02.mp3文件放入res/raw的文件夹中 从文件系统中播放 1,实例化一个MediaPlayer 2,MediaPlayer.setData方法调用(输入文 件所在路径) 3,调用MediaPlayer.prepare进行准备 4,调用start进行播放 核心代码 private void createMusicFromPath(String path) { mediaplayer = new MediaPlayer(); try { mediaplayer.setDataSource(path); mediaplayer.prepare(); mediaplayer.start(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } 注:将音频文件放入在手机的sdcard,输入路径即可播放 播放网络音乐 1,获取音乐链接地址 A,通过地址创建Uri,通过 MediaPlayer.create(this, uri)创建,获取player对象 B,new出MediaPlayer对象,通过 MediaPlayer.setData(webPath)创建player对象, 然后调用prepare(); 2,调用start方法进行播放 音乐播放器 多媒体状态 使用SeekBar实现控制播放位置功能 1,在视图xml中拖入SeekBar控件 2,设置seekBar.setMax(mediaPlayer.getDuration())为媒体 的最大长度 3,实现控件的OnSeekBarChangeListener接口 4,实现onProgressChanged(//当进度状态发生变化时候 SeekBar seekBar, int progress,//当前的进度 boolean fromUser)//是否由用户操作导致 public void onProgressChanged(SeekBar arg0, int progress, boolean isFromUser) { if(isFromUser) { mediaPlayer.seekTo(progress); } } 实现进度条SeekBar自动移动效果 //1,创建一个线程 Runnable run = new Runnable() { public void run() { // TODO Auto-generated method stub //获取当前播放音乐的位置 if(mediaPlayer != null) { int current = mediaPlayer.getCurrentPosition(); progressBar.setProgress(current); if(mediaPlayer.isPlaying()) { progressHandler.postDelayed(run,100); } } } }; //2,创建一个handler用于控制线程 Handler progressHandler = new Handler(); progressHandler.post(run);//启动线程 progressHandler.postDelayed(run,100);//延时启动线程 progressHandler.removeCallbacks(run);//删除指定的Runnable对象,使线程对象停止运行。 停止,暂停,重播功能实现 A,停止 1,首先判断是否是playing调用player的stop方法 2,同时要将还没有执行的线程从handler中移除 progressHandler.removeCallbacks(run); 3,将进度条的seekbar的进度设置为0 B,暂停 1,利用一个boolean变量判断是否是pause状态 2,判断playing,调用play的pause方法,并且removeCallbacks 3,如果是pause状态,则执行start,并且执行progressHandler.post方法 C,重播 1,mediaPlayer.seekTo(0), 2,progressBar.setProgress(0); 实现进度条SeekBar缓存条效果 //设置缓存更新事件 mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener(){ //实现更新方法 public void onBufferingUpdate(MediaPlayer arg0, int arg1) { //在每次更新之后,设置缓存条的进度 progressBar.setSecondaryProgress(arg1*progressBar.getMax() /100); } }); MediaPlayer的状态 A,停止 1,首先判断是否是playing调用player的stop方法 2,同时要将还没有执行的线程从handler中移除 progressHandler.removeCallbacks(run); 3,将进度条的seekbar的进度设置为0 B,暂停 1,利用一个boolean变量判断是否是pause状态 2,判断playing,调用play的pause方法,并且removeCallbacks 3,如果是pause状态,则执行start,并且执行progressHandler.post方法 C,重播 1,mediaPlayer.seekTo(0), 2,progressBar.setProgress(0); 核心代码  mediaPlayer.reset();//重置为idle状态  mediaPlayer.setDataSource(file.getAbsolutePath());//设置播放的文 件  mediaPlayer.prepare();//缓冲  mediaPlayer.setOnPreparedListener(new MyPreparedListener());// 设置缓冲完成监听  mediaPlayer.pause();//暂停  mediaPlayer.start();//播放音乐  mediaPlayer.stop(); ();//停止  mediaPlayer.seekTo(progress);//设置播放进度  mediaPlayer.release();//释放关联的资源  progressHandler.postDelayed(run,100);//定时调用Runnable对象  progressHandler.post(run);//将Runnable对象发送到消息队列中  progressHandler.removeCallbacks(run);//将run从消息队列中移除 视频播放器 SurfaceView控件 SurfaceView控件 SurfaceView . 可以直接从内存或者DMA等硬件接口取得图像 数据,是个非常重要的绘图容器 SurfaceHolder . 用来操纵surface,处理它在Canvas上画的效 果和动画,控制表面,大小,像素等 核心代码 SurfaceHolder surfaceHolder = surfaceView.getHolder();//surfaceView的控制对象 surfaceHolder.setFixedSize(176, 144);//设置分辨率 surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUS H_BUFFERS);//不使用surfaceview自身的缓冲机制,把得到的 数据直接输出 surfaceHolder.setKeepScreenOn(true);//保持屏幕的亮度 //在播放前设置显示画面 mediaPlayer.setDisplay(surfaceView.getHolder()); VideoView的使用 //获取VideoView对象 videoView = (VideoView) this.findViewById(R.id.videoView); //创建播放视频的URI Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolu tePath()+"/video.mp4"); //设置URI videoView.setVideoURI(uri);//uri //设置多媒体控制器 videoView.setMediaController(new MediaController(this)); videoView.start(); SoundPool android中可以用mediaplayer播放音乐,使用soundpool可以播一些短的反 应速度要求高的声音,比如点击时候的音效 //1,创建SoundPool soundPool = new SoundPool( 3,//同时播放的流的最大数量 AudioManager.STREAM_MUSIC,// 流的类型,一般为STREAM_MUSIC 0);//采样率转化质量,当前无效果,使用0作为默认值 //2,载入音效 int id = load(Context context, int resId, int priority) //从APK资源载 入 //3,通过id播放音效 soundPool.play(soundMap.get(id),//音频的id 100, //左边声音大小 100, //右边声音大小 1, //优先级别 0, //循环次数 1);//速率,1为正常速度 本章总结 1. 如何使用MediaPlayer播放MP3 2. 多媒体有哪些状态 3. 使用seekBar 4. 如何使用SurfaceView播放视频? 作业 1. 完成音乐播放器和视频播放器 查看更多

Copyright 2004-2019 ttzyw.com All Rights Reserved 闽ICP备18023965号-4

天天资源网声明:本站点发布的文章作品均来自用户投稿或网络整理,部分作品未联系到知识产权人或未发现有相关的知识产权登记

全屏阅读
关闭