版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Lesson3媒体播放器,第二阶段,长沙华瑞IT培训学校,课堂回顾,如何让控件动起来? 自定义控件的原理 自定义属性的两种方法 实现音量控件,长沙华瑞IT培训学校,多媒体简介,多媒体是计算机和视频技术的结合,实际上它是两个媒体:声音和图像 音频和视频的播放,我们都会用到MediaPlayer这个类进行播放,长沙华瑞IT培训学校,从源文件中播放,1,在项目的res/raw目录下,放置一个android支持的多媒体文件,如MP3,会在R文件中生成对应的索引 2,通过MediaPlayer.create(this, R.id.et_mp3)创建一个文件 3,使用start播放,长沙华瑞IT培训学校,
2、核心代码,mediaplayer = MediaPlayer.create(this, R.raw.music02); try mediaplayer.start(); catch (IllegalStateException e) e.printStackTrace(); 注:将muisc02.mp3文件放入res/raw的文件夹中,长沙华瑞IT培训学校,从文件系统中播放,1,实例化一个MediaPlayer 2,MediaPlayer.setData方法调用(输入文件所在路径) 3,调用MediaPlayer.prepare进行准备 4,调用start进行播放,长沙华瑞IT培训学校,核心代
3、码,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,输入路径即可播放,长沙华瑞IT培训学校,播放网络音乐,1,获取音乐链接地址 A,通过
4、地址创建Uri,通过 MediaPlayer.create(this, uri)创建,获取player对象 B,new出MediaPlayer对象,通过MediaPlayer.setData(webPath)创建player对象,然后调用prepare(); 2,调用start方法进行播放,长沙华瑞IT培训学校,音乐播放器,长沙华瑞IT培训学校,多媒体状态,长沙华瑞IT培训学校,使用SeekBar实现控制播放位置功能,1,在视图xml中拖入SeekBar控件 2,设置seekBar.setMax(mediaPlayer.getDuration()为媒体的最大长度 3,实现控件的OnSeekBa
5、rChangeListener接口 4,实现onProgressChanged(/当进度状态发生变化时候 SeekBar seekBar, int progress,/当前的进度 boolean fromUser)/是否由用户操作导致,public void onProgressChanged(SeekBar arg0, int progress, boolean isFromUser) if(isFromUser) mediaPlayer.seekTo(progress); ,长沙华瑞IT培训学校,实现进度条SeekBar自动移动效果,/1,创建一个线程 Runnable run = new
6、 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
7、 Handler(); progressHandler.post(run);/启动线程 progressHandler.postDelayed(run,100);/延时启动线程 progressHandler.removeCallbacks(run);/删除指定的Runnable对象,使线程对象停止运行。,长沙华瑞IT培训学校,停止,暂停,重播功能实现,A,停止 1,首先判断是否是playing调用player的stop方法 2,同时要将还没有执行的线程从handler中移除progressHandler.removeCallbacks(run); 3,将进度条的seekbar的进度设置为0
8、B,暂停 1,利用一个boolean变量判断是否是pause状态 2,判断playing,调用play的pause方法,并且removeCallbacks 3,如果是pause状态,则执行start,并且执行progressHandler.post方法 C,重播 1,mediaPlayer.seekTo(0), 2,progressBar.setProgress(0);,长沙华瑞IT培训学校,实现进度条SeekBar缓存条效果,/设置缓存更新事件 mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() /
9、实现更新方法 public void onBufferingUpdate(MediaPlayer arg0, int arg1) /在每次更新之后,设置缓存条的进度progressBar.setSecondaryProgress(arg1*progressBar.getMax()/100); );,长沙华瑞IT培训学校,MediaPlayer的状态,A,停止 1,首先判断是否是playing调用player的stop方法 2,同时要将还没有执行的线程从handler中移除progressHandler.removeCallbacks(run); 3,将进度条的seekbar的进度设置为0 B,
10、暂停 1,利用一个boolean变量判断是否是pause状态 2,判断playing,调用play的pause方法,并且removeCallbacks 3,如果是pause状态,则执行start,并且执行progressHandler.post方法 C,重播 1,mediaPlayer.seekTo(0), 2,progressBar.setProgress(0);,长沙华瑞IT培训学校,核心代码,mediaPlayer.reset();/重置为idle状态 mediaPlayer.setDataSource(file.getAbsolutePath();/设置播放的文件 mediaPlaye
11、r.prepare();/缓冲 mediaPlayer.setOnPreparedListener(new MyPreparedListener();/设置缓冲完成监听 mediaPlayer.pause();/暂停 mediaPlayer.start();/播放音乐 mediaPlayer.stop(); ();/停止 mediaPlayer.seekTo(progress);/设置播放进度 mediaPlayer.release();/释放关联的资源 progressHandler.postDelayed(run,100);/定时调用Runnable对象 progressHandler.p
12、ost(run);/将Runnable对象发送到消息队列中 progressHandler.removeCallbacks(run);/将run从消息队列中移除,长沙华瑞IT培训学校,视频播放器,SurfaceView控件,长沙华瑞IT培训学校,SurfaceView控件,SurfaceView 可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图容器 SurfaceHolder 用来操纵surface,处理它在Canvas上画的效果和动画,控制表面,大小,像素等,长沙华瑞IT培训学校,核心代码,SurfaceHolder surfaceHolder = surfaceView.
13、getHolder();/surfaceView的控制对象 surfaceHolder.setFixedSize(176, 144);/设置分辨率 surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);/不使用surfaceview自身的缓冲机制,把得到的数据直接输出 surfaceHolder.setKeepScreenOn(true);/保持屏幕的亮度 /在播放前设置显示画面 mediaPlayer.setDisplay(surfaceView.getHolder();,长沙华瑞IT培训学校,VideoView的使用,
14、/获取VideoView对象 videoView = (VideoView) this.findViewById(R.id.videoView); /创建播放视频的URI Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+/video.mp4); /设置URI videoView.setVideoURI(uri);/uri /设置多媒体控制器 videoView.setMediaController(new MediaController(this); videoView.start();,长沙华瑞IT培训学校,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资源
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业技术学院连锁经营与管理人才培养方案
- 西华师范大学《法律职业伦理》2022-2023学年期末试卷
- 西昌学院《广播音响报道》2021-2022学年第一学期期末试卷
- 房产拍卖合同范例
- 出口美国租房合同范例
- 丙纶防水施工合同模板
- 工厂电车维修合同模板
- 厂家木屋出售合同范例
- 土方车债务合同范例
- 2024-2025学年高中历史第四单元近代中国反侵略求民主的潮流4.16抗日战争课时分层作业含解析新人教版必修1
- 老人摔倒该不该扶
- 褐煤分析报告
- 文化与艺术行业2024年人力资源管理与制度优化
- 《雷达原理与系统》课件
- 2024年日历表(空白)(一月一张-可编辑做工作日历)
- 2024年半导体技术行业培训资料
- 掌握动物园营销技巧
- 第4课+中古时期的亚洲【中职专用】《世界历史》(高教版2023基础模块)
- 电动车充电安全
- 管理学原理课件英文版
- 五年级上册英语期中试卷-闽教版
评论
0/150
提交评论