教学课件第三次课件(媒体播放器)

上传人:仙*** 文档编号:245093942 上传时间:2024-10-07 格式:PPT 页数:24 大小:651.50KB
返回 下载 相关 举报
教学课件第三次课件(媒体播放器)_第1页
第1页 / 共24页
教学课件第三次课件(媒体播放器)_第2页
第2页 / 共24页
教学课件第三次课件(媒体播放器)_第3页
第3页 / 共24页
点击查看更多>>
资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,www.,huaruiedu,.com,长沙华瑞IT培训学校,*,Click to edit Master title style,Lesson3,媒体播放器,第二阶段,课堂回顾,如何让控件动起来?,自定义控件的原理,自定义属性的两种方法,实现音量控件,www.,huaruiedu,.com,长沙华瑞IT培训学校,多媒体简介,多媒体是计算机和视频技术的结合,实际上它是两个媒体:声音和图像,音频和视频的播放,我们都会用到MediaPlayer这个类进行播放,www.,huaruiedu,.com,长沙华瑞IT培训学校,从源文件中播放,1,在项目的res/raw目录下,放置一个android支持的多媒体文件,如MP3,会在R文件中生成对应的索引,2,通过MediaPlayer.create(this,R.id.et_mp3)创建一个文件,3,使用start播放,www.,huaruiedu,.com,长沙华瑞IT培训学校,核心代码,mediaplayer=MediaPlayer.create(this,R.raw.music02);,try,mediaplayer.start();,catch(IllegalStateException e),e.printStackTrace();,注:将muisc02.mp3文件放入res/raw的文件夹中,www.,huaruiedu,.com,长沙华瑞IT培训学校,从文件系统中播放,1,实例化一个MediaPlayer,2,MediaPlayer.setData方法调用(输入文件所在路径),3,调用,MediaPlayer,.prepare进行准备,4,调用start进行播放,www.,huaruiedu,.com,长沙华瑞IT培训学校,核心代码,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,输入路径即可播放,www.,huaruiedu,.com,长沙华瑞IT培训学校,播放,网络音乐,1,,获取音乐链接地址,A,通过地址创建Uri,通过 MediaPlayer.create(this,uri)创建,获取player对象,B,new出MediaPlayer对象,通过MediaPlayer.setData(webPath)创建player对象,然后调用prepare();,2,调用start方法进行播放,www.,huaruiedu,.com,长沙华瑞IT培训学校,音乐播放器,www.,huaruiedu,.com,长沙华瑞IT培训学校,多媒体,状态,www.,huaruiedu,.com,长沙华瑞IT培训学校,使用,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);,www.,huaruiedu,.com,长沙华瑞IT培训学校,实现进度条,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对象,使线程对象停止运行。,www.,huaruiedu,.com,长沙华瑞IT培训学校,停止,暂停,重播功能实现,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);,www.,huaruiedu,.com,长沙华瑞IT培训学校,实现进度条,SeekBar,缓存条效果,/设置缓存更新事件,mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener(),/实现更新方法,public void onBufferingUpdate(MediaPlayer arg0,int arg1),/在每次更新之后,设置缓存条的进度,progressBar.setSecondaryProgress(arg1*progressBar.getMax()/100);,);,www.,huaruiedu,.com,长沙华瑞IT培训学校,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);,www.,huaruiedu,.com,长沙华瑞IT培训学校,核心代码,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从消息队列中移除,www.,huaruiedu,.com,长沙华瑞IT培训学校,视频播放器,SurfaceView,控件,www.,huaruiedu,.com,长沙华瑞IT培训学校,SurfaceView控件,SurfaceView,可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图容器,SurfaceHolder,用来操纵surface,处理它在Canvas上画的效果和动画,控制表面,大小,像素等,www.,huaruiedu,.com,长沙华瑞IT培训学校,核心代码,SurfaceHolder surfaceHolder=surfaceView.getHolder();/surfaceView的控制对象,surfaceHolder.setFixedSize(176,144);/设置分辨率,surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);/不使用surfaceview自身的缓冲机制,把得到的数据直接输出,surfaceHolder.setKeepScreenOn(true);/保持屏幕的亮度,/在播放前,设置显示画面,mediaPlayer.setDisplay(surfaceView.getHolder();,www.,huaruiedu,.com,长沙华瑞IT培训学校,VideoView的使用,/获取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();,www.,huaruiedu,.com,长沙华瑞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资源载入,/3,通过id播
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!