1、Lesson3媒体播放器第二阶段第二阶段课堂回顾1. 如何让控件动起来?2. 自定义控件的原理3. 自定义属性的两种方法4. 实现音量控件多媒体简介v 多媒体是计算机和视频技术的结合,实际上它是两个媒体:声音和图像v 音频和视频的播放,我们都会用到MediaPlayer这个类进行播放从源文件中播放1,在项目的res/raw目录下,放置一个android支持的多媒体文件,如MP3,会在R文件中生成对应的索引2,通过MediaPlayer.create(this, R.id.et_mp3)创建一个文件3,使用start播放核心代码mediaplayer = MediaPlayer.create(t
2、his, R.raw.music02);try mediaplayer.start(); catch (IllegalStateException e) e.printStackTrace(); 注:将muisc02.mp3文件放入res/raw的文件夹中从文件系统中播放1,实例化一个MediaPlayer2,MediaPlayer.setData方法调用(输入文件所在路径)3,调用MediaPlayer.prepare进行准备4,调用start进行播放核心代码private void createMusicFromPath(String path)mediaplayer = new Medi
3、aPlayer();try mediaplayer.setDataSource(path);mediaplayer.prepare();mediaplayer.start(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); 注:将音频文件放入在手机的sdcard,输入路径即可播放播放网络音乐1,获取音乐链接地址A,通过地址创建Uri,通过 MediaPlayer.create(this, uri)创建,获取player对象B,new出MediaPlayer对象,通过MediaPlayer.se
4、tData(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 on
5、ProgressChanged(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.getCurr
6、entPosition();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
7、);/删除指定的删除指定的Runnable对象,使线程对象停止运行。对象,使线程对象停止运行。停止,暂停,重播功能实现A,停止 1,首先判断是否是playing调用player的stop方法2,同时要将还没有执行的线程从handler中移除progressHandler.removeCallbacks(run);3,将进度条的seekbar的进度设置为0B,暂停1,利用一个boolean变量判断是否是pause状态2,判断playing,调用play的pause方法,并且removeCallbacks3,如果是pause状态,则执行start,并且执行progressHandler.post方
8、法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
9、););MediaPlayer的状态的状态A,停止 1,首先判断是否是playing调用player的stop方法2,同时要将还没有执行的线程从handler中移除progressHandler.removeCallbacks(run);3,将进度条的seekbar的进度设置为0B,暂停1,利用一个boolean变量判断是否是pause状态2,判断playing,调用play的pause方法,并且removeCallbacks3,如果是pause状态,则执行start,并且执行progressHandler.post方法C,重播1,mediaPlayer.seekTo(0),2,progres
10、sBar.setProgress(0);核心代码v mediaPlayer.reset();/重置为idle状态v mediaPlayer.setDataSource(file.getAbsolutePath();/设置播放的文件v mediaPlayer.prepare();/缓冲v mediaPlayer.setOnPreparedListener(new MyPreparedListener();/设置缓冲完成监听v mediaPlayer.pause();/暂停v mediaPlayer.start();/播放音乐v mediaPlayer.stop(); ();/停止v mediaP
11、layer.seekTo(progress);/设置播放进度v mediaPlayer.release();/释放关联的资源v progressHandler.postDelayed(run,100);/定时调用Runnable对象v progressHandler.post(run);/将Runnable对象发送到消息队列中v progressHandler.removeCallbacks(run);/将run从消息队列中移除视频播放器SurfaceView控件SurfaceView控件控件vSurfaceView 可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图容器vSu
12、rfaceHolder 用来操纵surface,处理它在Canvas上画的效果和动画,控制表面,大小,像素等核心代码SurfaceHolder surfaceHolder = surfaceView.getHolder();/surfaceView的控制对象surfaceHolder.setFixedSize(176, 144);/设置分辨率surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);/不使用surfaceview自身的缓冲机制,把得到的数据直接输出surfaceHolder.setKeepScreenOn(tr
13、ue);/保持屏幕的亮度/在播放前设置显示画面mediaPlayer.setDisplay(surfaceView.getHolder();VideoView的使用/获取VideoView对象videoView = (VideoView) this.findViewById(R.id.videoView);/创建播放视频的URIUri uri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+/video.mp4);/设置URIvideoView.setVideoURI(uri);/uri/设置多媒体
14、控制器videoView.setMediaController(new MediaController(this);videoView.start();SoundPoolandroid中可以用mediaplayer播放音乐,使用soundpool可以播一些短的反应速度要求高的声音,比如点击时候的音效/1,创建SoundPoolsoundPool = new SoundPool(3,/同时播放的流的最大数量 AudioManager.STREAM_MUSIC,/ 流的类型,一般为STREAM_MUSIC0);/采样率转化质量,当前无效果,使用0作为默认值 /2,载入音效int id = load
15、(Context context, int resId, int priority) /从APK资源载入 /3,通过id播放音效soundPool.play(soundMap.get(id),/音频的id100, /左边声音大小100, /右边声音大小1, /优先级别0, /循环次数1);/速率,1为正常速度本章总结1. 如何使用MediaPlayer播放MP32. 多媒体有哪些状态3. 使用seekBar4. 如何使用SurfaceView播放视频?作业1. 完成音乐播放器和视频播放器知识就是力量知识就是力量你知道吗?我昨晚又梦到你了,梦中的你一如既往地帅气,你背对着我,坐在那家我们常去的咖
16、啡馆常坐的位置,我进门径直朝着那个位置走去,却看到了你,我就愣在那儿停顿了好久,然后你转过头来看到了我,你朝我笑,我鼓起勇气试着向你走近,却始终走不到那你知道吗?我昨晚又梦到你了,梦中的你一如既往地帅气,你背对着我,坐在那家我们常去的咖啡馆常坐的位置,我进门径直朝着那个位置走去,却看到了你,我就愣在那儿停顿了好久,然后你转过头来看到了我,你朝我笑,我鼓起勇气试着向你走近,却始终走不到那个位置,眼睁睁地看着你近在咫尺,却偏偏难以靠近,最后直到你消失不见。个位置,眼睁睁地看着你近在咫尺,却偏偏难以靠近,最后直到你消失不见。我猛然醒来,睁眼,漆黑,宁静,我放空了几秒,然后才终于认清你已经离开我的事实
17、。是啊,已经离开了。我猛然醒来,睁眼,漆黑,宁静,我放空了几秒,然后才终于认清你已经离开我的事实。是啊,已经离开了。都说,梦中梦到的人,是因为心底觉得离得好远,所以我才会想要在梦中再见见你,可是,在梦中你也离得我好远,我怎么也靠不近你。都说,梦中梦到的人,是因为心底觉得离得好远,所以我才会想要在梦中再见见你,可是,在梦中你也离得我好远,我怎么也靠不近你。也许是在用这种方式告诉我,分开了就不要怀抱希望,现实,梦中都不能。也许是在用这种方式告诉我,分开了就不要怀抱希望,现实,梦中都不能。我们在一起时,身边的朋友都知道,爱你,是他们都知道的事情,后来分开,只有少部分人知道,可是没有人知道我还爱你,这
18、是属于我一个人的秘密。我们在一起时,身边的朋友都知道,爱你,是他们都知道的事情,后来分开,只有少部分人知道,可是没有人知道我还爱你,这是属于我一个人的秘密。后来的我一直单身,有时候朋友开玩笑说后来的我一直单身,有时候朋友开玩笑说“你是不是还没有忘掉他你是不是还没有忘掉他”我说我说“怎么可能,我这么拿的起放的下的人,早忘了。怎么可能,我这么拿的起放的下的人,早忘了。”回答的干脆利落,以至于他们都信了,说的多了,连我都几乎信了。回答的干脆利落,以至于他们都信了,说的多了,连我都几乎信了。可是,那为何会在听到你的名字时心头一震,为何会在不经意间想起你的时候心底隐隐难受,为何会在街上看到一个和你相似的
19、背影心脏漏停一秒,为何总是会入我的梦,又为何对后来身边出现的男生都无感,直至今日,你依然是我拒绝别人的理由。我没有在等你可是,那为何会在听到你的名字时心头一震,为何会在不经意间想起你的时候心底隐隐难受,为何会在街上看到一个和你相似的背影心脏漏停一秒,为何总是会入我的梦,又为何对后来身边出现的男生都无感,直至今日,你依然是我拒绝别人的理由。我没有在等你,却还是喜欢不上别人。,却还是喜欢不上别人。会偷偷地跑到你的空间,因为当时在一起的时候微信还没有如此盛行,那时候会要求你弄成情侣头像,关联会偷偷地跑到你的空间,因为当时在一起的时候微信还没有如此盛行,那时候会要求你弄成情侣头像,关联qq号,设置成情
20、侣空间,有空了就一直在你空间留言,后来我们的号,设置成情侣空间,有空了就一直在你空间留言,后来我们的qq不再关联,你也换了头像,换了空间装扮,清空了所有留言。我偷偷地溜进去转了一圈不再关联,你也换了头像,换了空间装扮,清空了所有留言。我偷偷地溜进去转了一圈,然后默默地删除访问记录。想知道你的消息,又怕你知道我还在惦记。,然后默默地删除访问记录。想知道你的消息,又怕你知道我还在惦记。会偷偷地跑到你的城市,在我们经常走过的那条小路转转,呼吸着这座城市的空气,吹着和你一样的风,算不算相拥?会偷偷地跑到你的城市,在我们经常走过的那条小路转转,呼吸着这座城市的空气,吹着和你一样的风,算不算相拥?也会一个
21、人背着包到处旅行,记得和你说过很多想要去的地方,你总说等咱有钱了,想去哪去哪,你总说等有机会了,去很多地方。可是直到分开还是没有去过任何一个地方,我一个人走走停停,看一起说过的风景,而你在哪里?也会一个人背着包到处旅行,记得和你说过很多想要去的地方,你总说等咱有钱了,想去哪去哪,你总说等有机会了,去很多地方。可是直到分开还是没有去过任何一个地方,我一个人走走停停,看一起说过的风景,而你在哪里?在一起两年的光景,用了三年的时间念念不忘,回忆比经历还要长,该说自己太痴情还是太想不开呢?在一起两年的光景,用了三年的时间念念不忘,回忆比经历还要长,该说自己太痴情还是太想不开呢?其实有时候我们的内心远远
22、没有表面那么潇洒,背影一转身就可以,而心里的空缺要怎样去填平?离开后的日子我瞒着所有人爱了你好久好久,我想这应该是我说分手的代价吧。但是该偿还的三年时光已经够了吧,剩下的我只想活给自己看。其实有时候我们的内心远远没有表面那么潇洒,背影一转身就可以,而心里的空缺要怎样去填平?离开后的日子我瞒着所有人爱了你好久好久,我想这应该是我说分手的代价吧。但是该偿还的三年时光已经够了吧,剩下的我只想活给自己看。以前总希望你能来,会突然站在我的面前,会给我打电话让我到楼下给我惊喜,会轻轻地说一句以前总希望你能来,会突然站在我的面前,会给我打电话让我到楼下给我惊喜,会轻轻地说一句“别来无恙别来无恙”可是现在我不
23、想要了,那些无处安放的情感就让它各自归位,你别来,我一个人也无恙。春色远走,风情长留。爱若放手,祝福依旧。可是现在我不想要了,那些无处安放的情感就让它各自归位,你别来,我一个人也无恙。春色远走,风情长留。爱若放手,祝福依旧。 题记题记人都说,爱上一座城,是因为城中住着你爱的人。爱屋及乌自是不言而喻,每个人的生命中都会出现这样一个人,纵使尘满面,鬓如霜,也想要和他相伴到岁末晚景。我深信此画面曾被无数人精心描摹过,因为它是人们心里憧憬的最美的爱相逢。这个浪漫的人都说,爱上一座城,是因为城中住着你爱的人。爱屋及乌自是不言而喻,每个人的生命中都会出现这样一个人,纵使尘满面,鬓如霜,也想要和他相伴到岁末
24、晚景。我深信此画面曾被无数人精心描摹过,因为它是人们心里憧憬的最美的爱相逢。这个浪漫的“版图版图”,也是温暖与真挚包裹的纯粹感情,所刻画的一幅朴素人生。,也是温暖与真挚包裹的纯粹感情,所刻画的一幅朴素人生。世间最理想的爱情,当然是两颗同心,一生相濡以沫。擦肩而过,只能说彼此情深缘浅。放手成全,可能给人感觉言过凄美,听着有些颇为冷情,可谁也不能否认这不是因为爱情。世间最理想的爱情,当然是两颗同心,一生相濡以沫。擦肩而过,只能说彼此情深缘浅。放手成全,可能给人感觉言过凄美,听着有些颇为冷情,可谁也不能否认这不是因为爱情。爱情是什么?我只能说是一种忘我的感觉,一种怡然心扉的情愫,它体现着爱情的完美纯
25、度。爱情是什么?我只能说是一种忘我的感觉,一种怡然心扉的情愫,它体现着爱情的完美纯度。 “遇一人白首,择一城终老遇一人白首,择一城终老”,人人心期遇见这样的尘缘,从此守候这种温暖。可生活并非是你以为的那么顺然,爱情也有难违的宿命。,人人心期遇见这样的尘缘,从此守候这种温暖。可生活并非是你以为的那么顺然,爱情也有难违的宿命。虽然在爱着的岁月里,谁都想远离苦情的日子,谁都想告别痛彻心扉的分手领悟,谁都喜欢让爱情的阳光,洒满心空。虽然在爱着的岁月里,谁都想远离苦情的日子,谁都想告别痛彻心扉的分手领悟,谁都喜欢让爱情的阳光,洒满心空。但爱情有时就是那么不可思议,有些人相爱时海誓山盟、琴瑟和鸣,却逃不开
26、生活的细节,导致情源枯竭,爱因此无疾而终。有些人即便爱得肝肠寸断,到最后还是一人向左,一人向右。也有一些人,一路磕磕绊绊,分分合合,几度被所谓的爱情来回折腾,于风风但爱情有时就是那么不可思议,有些人相爱时海誓山盟、琴瑟和鸣,却逃不开生活的细节,导致情源枯竭,爱因此无疾而终。有些人即便爱得肝肠寸断,到最后还是一人向左,一人向右。也有一些人,一路磕磕绊绊,分分合合,几度被所谓的爱情来回折腾,于风风雨雨里磨合几十年,甚至把所有的离歌全唱过,依然不改初心。类似这种戒不掉的疼痛,谁又能说这不是因为爱情?雨雨里磨合几十年,甚至把所有的离歌全唱过,依然不改初心。类似这种戒不掉的疼痛,谁又能说这不是因为爱情?
27、不管今生遇见了怎样的情缘,也无论爱与被爱,彼此能够遇见,就是上天注定好的缘份。被一个人吸引,首先看得是眼缘。不管今生遇见了怎样的情缘,也无论爱与被爱,彼此能够遇见,就是上天注定好的缘份。被一个人吸引,首先看得是眼缘。 一但爱情使得彼此之间变成小心翼翼的撕扯,关心变成了束缚和互相伤害的导火索,放手或许是最明智的选择。爱情,从来没有配不配,有的一但爱情使得彼此之间变成小心翼翼的撕扯,关心变成了束缚和互相伤害的导火索,放手或许是最明智的选择。爱情,从来没有配不配,有的只是适不适合。只是适不适合。爱一个人,首先应该让他(她)快乐。对于一段情,能够温暖彼此心灵最重要,可以让彼此记住曾经的美好最难得。早就
28、有人说,爱不是索取,不是占有。爱是给予,是奉献,是成全。爱一个人,首先应该让他(她)快乐。对于一段情,能够温暖彼此心灵最重要,可以让彼此记住曾经的美好最难得。早就有人说,爱不是索取,不是占有。爱是给予,是奉献,是成全。一直喜欢一直喜欢有一种爱叫做放手有一种爱叫做放手的老歌,阿木用他沙哑的音色唱着:有一种爱叫做放手,为爱结束天长地久,我的离去若让你拥有所有,让真爱带我走说分手的老歌,阿木用他沙哑的音色唱着:有一种爱叫做放手,为爱结束天长地久,我的离去若让你拥有所有,让真爱带我走说分手这一段令听者撕心裂肺的副歌,每每回味,心中总会涌出不能自己的颤抖和感动这一段令听者撕心裂肺的副歌,每每回味,心中总
29、会涌出不能自己的颤抖和感动但凡天下的事,一般都能说得清。唯独爱,无法解释。有些爱,只是自己明了。有些行为,惟有自己懂得。也许有些人的爱情,就是开始浅喜后来才是深爱,这种感觉大概很多人都经历过。但凡天下的事,一般都能说得清。唯独爱,无法解释。有些爱,只是自己明了。有些行为,惟有自己懂得。也许有些人的爱情,就是开始浅喜后来才是深爱,这种感觉大概很多人都经历过。可能他(她)从不对你说,爱上你,具体是什么感觉。也不想告诉你,你的出现,消弭了他(她)之前对爱的一切困惑。更不想说,你于他(她),曾是人生深渊里唯一类似光的存在。尤其不想让你知道,某时某刻,你在城里,他(她)在城外,仅是带着祝福在此可能他(她
30、)从不对你说,爱上你,具体是什么感觉。也不想告诉你,你的出现,消弭了他(她)之前对爱的一切困惑。更不想说,你于他(她),曾是人生深渊里唯一类似光的存在。尤其不想让你知道,某时某刻,你在城里,他(她)在城外,仅是带着祝福在此经过。经过。有位名人说,未经失意,不懂人生。未经失恋,不懂爱情。有位名人说,未经失意,不懂人生。未经失恋,不懂爱情。爱情就像是一场没有角本的演出,没有台词,没有彩排,相爱的人都是主角。我们深知,爱上,是一个人的事儿。相爱,却是两个人的事儿。爱与不爱,深爱或浅爱,是自己的事儿。珍不珍惜,放不放手,取决于爱到对方何种成度。爱情就像是一场没有角本的演出,没有台词,没有彩排,相爱的人
31、都是主角。我们深知,爱上,是一个人的事儿。相爱,却是两个人的事儿。爱与不爱,深爱或浅爱,是自己的事儿。珍不珍惜,放不放手,取决于爱到对方何种成度。有时候放手,并非意味着不爱,反而是深爱的一种表现。就如歌里唱的这样:有时候放手,并非意味着不爱,反而是深爱的一种表现。就如歌里唱的这样:如果你对天空向往,渴望一双翅膀,放手让你飞翔,你的羽翼不该伴随玫瑰,听从凋谢的时光。浪漫如果变成了牵绊,我愿为你选择回到孤单。缠绵如果变成了锁链,抛开诺言如果你对天空向往,渴望一双翅膀,放手让你飞翔,你的羽翼不该伴随玫瑰,听从凋谢的时光。浪漫如果变成了牵绊,我愿为你选择回到孤单。缠绵如果变成了锁链,抛开诺言这种忧伤与
32、爱恋交织的放手,是为了还对方自由。成全自己爱上的那个人,去做他(她)想做的事情。不愿因为爱一个人,从而致使那个人失去自我。这种忧伤与爱恋交织的放手,是为了还对方自由。成全自己爱上的那个人,去做他(她)想做的事情。不愿因为爱一个人,从而致使那个人失去自我。欢乐颂欢乐颂2里曲筱绡也说,放手,是不想改变爱上的初衷。里曲筱绡也说,放手,是不想改变爱上的初衷。放手,不再打扰。即便忍不住思念,也要忍住脚步。即使带着祝福来到他(她)的城,也会绕城而过。仅是站在遥远的国度,许下深深地祝福放手,不再打扰。即便忍不住思念,也要忍住脚步。即使带着祝福来到他(她)的城,也会绕城而过。仅是站在遥远的国度,许下深深地祝福
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。