AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第八章 多媒体编程_第1页
AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第八章 多媒体编程_第2页
AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第八章 多媒体编程_第3页
AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第八章 多媒体编程_第4页
AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第八章 多媒体编程_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章多媒体编程安卓·入门与开发目录8.1 动画8.2 音频与视频8.3 商品详情页面的背景音乐在应用Android进行项目开发时,特别是在进行游戏开发时,经常需要涉及动画。Android中的动画通常可以分为补间动画和逐帧动画两种。下面将分别介绍如何实现这两种功能。8.1动画8.1动画目录8.1 动画8.1.1 TweenAnimation补间动画8.1.2 FrameAnimation逐帧动画8.1.1TweenAnimation补间动画 Tween动画,通过对View的内容进行一系列的图形变换(包括平移、缩放、旋转、改变透明度)来实现动画效果,如表8.1所示。动画效果的定义可以采用XML来做也可以采用编码来做。表8.1动画类型表动画类型XML配置方式Java代码实现方式渐变透明度动画效果<alpha/>AlphaAnimation渐变尺寸缩放动画效果<scale/>ScaleAnimation画面旋转动画效果<rotate/>RotateAnimation画面位置移动动画效果<translate/>TranslateAnimation组合动画效果<set/>AnimationSet8.1动画1.)alpha渐变透明度动画效果XML布局如下:alpha渐变透明度动画效果表如表8.2所示。<?xmlversion="1.0"encoding="utf-8"?><alphaxmlns:android="/apk/res/android"android:duration="500"android:fillAfter="false"android:fromAlpha="1.0"android:toAlpha="0.0"/>属性描述fromAlpha开始时透明度toAlpha开始时透明度fillAfter结束时透明度fromAlpha动画持续时间duration设置动画结束后保持当前的位置XML方式加载方式通过AnimationUtils.loadAnimation(this,R.anim.anim_alpha)获取Animation。AnimationalphaAnimation=AnimationUtils.loadAnimation(this,R.anim.anim_alpha);imageView.startAnimation(alphaAnimation);8.1动画<?xmlversion="1.0"encoding="utf-8"?><scalexmlns:android="/apk/res/android"android:duration="500"android:fromXScale="0.0"android:fromYScale="0.0"android:interpolator="@android:anim/decelerate_interpolator"android:pivotX="50%"android:pivotY="50%"android:repeatCount="1"android:repeatMode="reverse"android:startOffset="0"android:toXScale="1.5"android:toYScale="1.5"/>scale渐变透明度动画效果表如表8.3所示。属性描述fromXDelta,fromYDelta起始时X,Y座标,屏幕右下角的座标是X:320,Y:480toXDelta,toYDelta动画结束时X,Y的座标interpolator指定动画插入器fromXScale,fromYScale动画开始前X,Y的缩放,0.0为不显示,1.0为正常大小toXScale,toYScale动画最终缩放的倍数,1.0为正常大小,大于1.0放大pivotX,pivotY动画起始位置,相对于屏幕的百分比,两个都为50%表示动画从自身中间开始startOffset动画多次执行的间隔时间,如果只执行一次,执行前会暂停这段时间,单位毫秒duration一次动画效果消耗的时间,单位毫秒,值越小动画速度越快repeatCount动画重复的计数,动画将会执行该值+1次repeatMode动画重复的模式,reverse为反向,当第偶次执行时,动画方向会相反。restart为重新执行,方向不变

在动画的每个周期里面做不同的操作,可以借助动画监听器Animation.AnimationListener。alphaAnimation.setAnimationListener(newAnimation.AnimationListener(){@OverridepublicvoidonAnimationStart(Animationanimation){//动画开始时调用}@OverridepublicvoidonAnimationEnd(Animationanimation){//动画结束时调用}@OverridepublicvoidonAnimationRepeat(Animationanimation){//动画重复时调用}});2.)scale渐变尺寸缩放动画效果XML布局如下:8.1动画目录8.1 动画8.1.1 TweenAnimation补间动画8.1.2 FrameAnimation逐帧动画8.1.2FrameAnimation逐帧动画逐帧动画(Frame-by-frameAnimations)从字面上理解就是一帧挨着一帧的播放图片,就像放电影一样。和补间动画一样可以通过xml实现也可以通过java代码实现。接下来借助目前项目中的一个开奖的动画来总结如何使用。实现效果如图8.1所示:图8.1开奖动画动画效果图8.1动画<?xmlversion="1.0"encoding="utf-8"?><animation-listxmlns:android="/apk/res/android"android:oneshot="false"><itemandroid:drawable="@mipmap/lottery_1"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_2"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_3"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_4"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_5"android:duration="200"/><itemandroid:drawable="@mipmap/lottery_6"android:duration="200"/></animation-list>根节点是animation-list(动画列表),里面有一个或者多个item节点组成,oneshot属性表示是否只播放一次,true表示只会播放一次,false表示一直循环播放,内部用item节点声明一个动画帧,android:drawable指定此帧动画所对应的图片资源,android:druation代表此帧持续的时间,整数,单位为毫秒。8.1动画1、在res/drawable目录下新建一个文件lottery_animlist.xml,内容如下:<ImageViewandroid:id="@+id/animation_iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_margin="10dp"android:src="@drawable/lottery_animlist"/>这个时候运行一下,发现动画没有运行而是停留在第一帧,那是因为AnimationDrawable播放动画是依附在window上面的,而在ActivityonCreate方法中调用时Window还未初始化完毕,所有才会停留在第一帧,要想实现播放必须在onWindowFocusChanged中添加如下代码:imageView.setImageResource(R.drawable.lottery_animlist);AnimationDrawableanimationDrawable=(AnimationDrawable)imageView.getDrawable();animationDrawable.start();如果想要停止播放动画可以调用AnimationDrawable的stop方法。imageView.setImageResource(R.drawable.lottery_animlist);AnimationDrawableanimationDrawable=(AnimationDrawable)imageView.getDrawable();animationDrawable.stop();2、用ImageView控件作为动画载体来显示动画8.1动画3、纯Java代码实现方式AnimationDrawableanim=newAnimationDrawable();for(inti=1;i<=6;i++){intid=getResources().getIdentifier("lottery_"+i,"mipmap",getPackageName());Drawabledrawable=getResources().getDrawable(id);anim.addFrame(drawable,200);}anim.setOneShot(false);imageView.setImageDrawable(anim);anim.start();8.1动画4、AnimationDrawable

几个常见的APIAnimationDrawable几个常见的API如表8.4所示表8.4AnimationDrawable常见API表方法描述voidstart()开始播放动画voidstop()停止播放动画addFrame(Drawableframe,intduration)添加一帧,并设置该帧显示的持续时间。voidsetOneShoe(booleanflag)false为循环播放,true为仅播放一次booleanisRunning()是否正在播放FrameAnimation(逐帧动画)相对来说比较简单,但是在实际开发中使用的频率还是比较高的,希望通过这个小例子能够掌握逐帧动画。由于逐帧动画只能实现比较小的动画效果,如果复杂而且帧数比较多,则不太建议使用逐帧动画。如果真是超级复杂的动画,建议选择双缓冲绘制View来实现。8.1动画目录8.1 动画8.2 音频与视频8.3 商品详情页面的背景音乐8.2音频与视频8.2音频与视频Android提供了对常用音频和视频格式的支持,它所支持的音频格式有MP3、3GP、Ogg和WAVE等,支持的视频格式有3GP和MP4等。通过AndroidAPI提供的相关方法,可以在Android中实现音频与视频的播放。下面将分别介绍播放音频与视频的不同方法。目录8.2 音频与视频8.2.1 使用MediaPlayer类播放音频8.2.2 使用SoundPool类播放视频8.2.3 使用VideoView组件播放视频8.2.1使用MediaPlayer类播放音频MediaPlayer是一个支持音频及视频文件播放的Android类,可播放不同来源(本地或网络流媒体)、多种格式(如WAV、MP3、OggVorbis、MPEG-4以及3GPP)的多媒体文件。要想利用MediaPlayer实现音频的播放,首先要对MediaPlayer进行初始化工作,得到MediaPlayer对象,在通过MediaPlayer进行相应的操作。参考书上P191-194。8.2音频与视频目录8.2 音频与视频8.2.1 使用MediaPlayer类播放音频8.2.2 使用SoundPool类播放视频8.2.3 使用VideoView组件播放视频8.2.2使用SoundPool类播放视频Android还提供了另一个播放音频的类—SoundPool(音频池),可以同时播放多个短小的音频,而且占用的资源较少。SoundPool主要用于播放一些较短的声音片段,与MediaPlayer相比,SoundPool的优势在于CPU资源占用量低和反应延迟小。另外,SoundPool还支持自行设置声音的品质、音量、播放比率等参数。基本方法如下:构造器,用于初始化一个SoundPool,SoundPool(intmaxStreams,intstreamType,intsrcQuality)// ØmaxStreams:指定同时可以播放的音频流个数ØstreamType:指定声音的类型,简单来说,就是播放的时候,以哪种声音类型的音量播放。如:STREAM_ALARM,是警报的声音类型。ØsrcQuality:音频的质量,设置为0代表默认。加载音频,提供不同的加载方式,可以从res/raw中加载,或者是从StringPath中加载,并指定优先级。优先级越高当然越优先播放。加载完成后返回一个资源ID,代表这个音频在SoundPool池中的ID。intload(Contextcontext,intresld,intpriority):播放音频,需要指定加载时返回的资源ID才能播放。intplay(intsoundID,floatleftVolume,floatrightVolume,intpriority,intloop,floatrate) ØsoundID:该方法的第一个参数指定播放哪个声音,即load后返回的IDØleftVolume、rightVolume:指定左、右的音量Øpriority:指定播放声音的优先级,数值越大,优先级越高;Øloop:指定是否循环,0为不循环,-1为循环;Ørate:指定播放的比率,数值可从0.5到2,1为正常比率。加载完成的回调。虽然是加载一个很小的音频,但还是需要一点时间。所以,就有这个回调。sampleId就是音频的ID,用于标识哪个音频,status,加载完成的状态,0为成功。onLoadComplete(SoundPoolsoundPool,intsampleId,intstatus)8.2音频与视频目录8.2 音频与视频8.2.1 使用MediaPlayer类播放音频8.2.2 使用SoundPool类播放视频8.2.3 使用VideoView组件播放视频8.2.3使用VideoView组件播放视频在Android中提供了VideoView组件用于播放视频文件,要想使用VideoView组件播放视频首先要在布局文件中添加该组件,然后在Activity中获取该组件,并应用其setVideoPath方法或setVideoURI方法加载要播放的视频,最后调用start方法来播放视频。另外,VideoView组件还提供了stop()和pasuse方法,分别用于通知和暂停视频的播放。基本使用格式如下:VideoViewmVv=(VideoView)findViewById(R.id.vv);//添加播放控制条,mVv.setMediaController(newMediaController(this));//设置视频源播放res/raw中的文件,文件名小写字母,格式:3gp,mp4等,flv的不一定支持;UrirawUri=Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.shuai_dan_ge);mVv.setVideoURI(rawUri);//播放在线视频mVideoUri=Uri.parse("http://****/abc.mp4");mVv.setVideoPath(mVideoUri.toString());mVv.start();mVv.requestFocus();mVv.resume();mVv.setOnPreparedListener(this);mVv.setOnErrorListener(this);mVv.setOnCompletionListener(this);8.2音频与视频目录8.1 动画8.2 音频与视频8.3 商品详情页面的背景音乐使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。本章学习了用MediaPlayer播放音频,这里介绍如何用MediaPlayer类给商品详情页面添加背景音乐。本章代码会涉及到Service服务,因为Service是能够在后台长时间运行,并且不提供用户界面的应用程序组件。其他应用程序组件能启动Service,并且切换到另一个应用程序时,Service还可以在后台运行。如果要关闭Service和背景音乐,可以重写onBackPressed方法,监听返回按键,按下则关闭服务。8.3商品详情页面的背景音乐8.3商品详情页面的背景音乐使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。1、在项目名上单击鼠标右键,在弹出快捷菜单上,选择新建service包,用于存放service。如图8.2所示。8.3商品详情页面的背景音乐图8.2新建service包图8.3商品详情页面的背景音乐使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。2、在AndroidManifest.xml文件中的<Application>标签内加入下面的语句。8.3商品详情页面的背景音乐<serviceandroid:name="com.mingrisoft.mrshop.service.MusicServer"><intent-filter><actionandroid:name="com.angel.Android.MUSIC"/><categoryandroid:name="ent.category.default"/></intent-filter></service>8.3商品详情页面的背景音乐使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。3、在service包节点上单击鼠标右键,在弹出快捷菜单上,选择新建MusicServer.java类,继承Service。8.3商品详情页面的背景音乐4、声明mediaPlayer,重写onCreate方法初始化媒体播放器;重写onStartCommand方法启动播放;重写onDestroy方法停止播放;具体代码参考书上197页-199页8.3商品详情页面的背景音乐使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。5、在商品详情GoodsDetailsActivity的onCreate()里启动播放;8.3商品详情页面的背景音乐Toast.makeText(GoodsDetailsActivity.this,"开始播放背景音乐",Toast.LENGTH_SHORT).show();//播放背景音乐Intentintent=newIntent(GoodsDetailsActivity.thi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论