资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2020/6/2,#,第十章 高级编程,10.1 Notification,的使用,10.5,动画,10.3,多媒体,10.2,摄像头与相册,10.4 Material Design,体验,10.6,小结,8.7,小结,10.1 Notification,的使用,通知(,Notification,)是,Android,系统提供的一种具有全局效果的通知功能,可以在系统通知栏中显示。当,APP,向系统发出通知时它将先以图标的形式显示在通知栏中。用户可以下拉通知栏查看通知的详细信息。通知栏和抽屉式通知栏均是由系统控制,用户可以随时查看。,想要了解通知的基本概念我们先来看一下通知的使用方法。通知的创建比较灵活,可以在活动中创建也可以在广播接收器中创建,当然也可以在我们上一章学习的服务中创建,相比后两种创建方式,在活动中创建通知的情况比较少见,一般只有当程序进入后台执行时才会需要这种类型的通知。,10.1 Notification,的使用,Android 8.0,系统之后,,Google,推出了通知渠道的概念。,通知渠道是开发人员在创建通知的时候为每个通知指定的渠道,你也可以理解成是通知类型。属于同一通知渠道的通知可以进行统一管理。,创建的方法也不难,首先创建,NotificationChannel,对象,指定,Channel,的,id,、,name,和通知的重要程度,代码如下所示:,然后使用,NotificationMannager,的,createNotificationChannel,方法来添加,Channel,,代码如下所示:,NotificationChannel channel=new NotificationChannel(channel_id,channel_name,NotificationManager.IMPORTANCE_DEFAULT);,getNotificationManager().createNotificationChannel(channel);,运行程序点击,SEND SERVICE,按钮,可以系统状态来左边看到小图标并且从下拉通知状态来可以看到通知的详细信息,如右图,想要实现通知信息的点击效果我们还需要在代码中进行相应设定,这就是新的概念,PendingIntent,。,PendingIntent,类似于,Intent,,但是与,Intent,倾向于立即执行某个动作的操作不同,,PendingIntent,更倾向于在某个合适的实际去执行某个动作,也可以理解成延迟执行的,Intent,。,用法很简单,,PendingIntent,提供了几个静态方法来获取实例,包括,getActivity(),方法、,getBroadcast(),方法以及,getService(),方法。,10.1 Notification,的使用,10.2,摄像头与相册,10.2.1,调用摄像头,首先创建,File,对象用于存放摄像头拍下的图片,并将拍摄到的图片命名为,output_image.jpg,存放于手机,SD,卡的应用关联混村目录下,通过调用,getExternalCacheDir(),方法得到这个目录。,接下来构建,Intent,对象,并通过,Intent,对象的,action,指定,android.media.action.IMAGE_CAPTURE,隐式启动摄像机,在调用,Intent,的,putExtra,方法指定图片输出路径,。,Google,对,Android,高版本使用用户数据的权限越来越严,因此本例中涉及到保存到,SD,卡的权限以及使用摄像机的两个权限需要申请运行时权限。,10.2,摄像头与相册,10.2.2,相册使用,在,openAlbm(),方法中,我们先构建出隐式,Intetn,对象,并将它的,action,指定为,android.intent.GRT_CONTENT,。,为这个,Intent,对象设置必要的参数,然后调用数据回传的启动方式,startActivityForResult(),方法启动。,当我们从相册选择完照片回到,onActivityResult(),方法时会根据整形常量选择不同的分支处理图片。,接下来根据手机,Android,系统的版创建了两个方法,handleImageHigh(),和,handleImageBefor(),方法,分别用来处理不同,Android SDK,版本的图片。,MediaPlayer,是用于播放音频和视频的,它支持多种格式音频文件(,3gp,、,mp4,),并提供了非常全面的控制方法。,10.3,多媒体,方法名称,功能描述,setDataSource(),设置要播放的音频文件的位置,prepare(),在开始播放之前调用这个方法完成准备工作,start(),开始或继续播放音频,pause(),暂停播放音频,reset(),将,MediaPlayer,对象重置到刚刚创建的状态,seekTo(),从指定位置开始播放音频,stop(),停止播放音频,调用该方法后,MediaPlayer,对象无法在播放音频,release(),释放掉与,MediaPlayer,对象相关的资源,isPlaying(),判断当前,MediaPlayer,是否正在播放音频,getDuration,获取载入的音频文件的时长,MediaPlayer,常用方法,MediaPlayer,接收音频类型有很多,其中有四种较为常用的类型:,AudioManager.STREAM_MUSIC,(音乐),AudioManager.STREAM_RING,(响铃),AudioManager.STREAM_ALARM,(闹钟),AudioManager.STREAM_NOTIFICTION,(提示音),音频类型不同占据的内存空间也不同,音频时间越短占的内存越小,MediaPlayer mediaPlayer=new MediaPlayer();,mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);,10.3,多媒体,设置声音流类型,设置数据源有三种方式,分别是播放应用自带的音频文件、播放,SD,卡中的音频文件、播放网络音频文件。,10.3,多媒体,mediaPlayer.create(this,R.raw.xxx);,mediaPlayer.setDataSource(mnt/sdcard/xxx.mp3);,mediaPlayer.setDataSource(www.xxx.mp3);,应用程序自带音频文件,SD,卡中音频文件,网络音频文件,10.3.2 VideoView,播放视频,播放视频文件与播放音频文件类似,视频文件需要使用视觉组件将影像展示出来。在,Android,中主要使用,VideoView,组件播放视频。它将视频的显示和控制集于一身,借助这个控件就可以完成简易的视频播放器。,10.3,多媒体,方法名称,功能描述,setVideoPath(),设置要播放的视频文件的位置,start(),开始或继续播放视频,pause(),暂停播放视频,resume(),将视频重新开始播放,seetTo(),从指定位置开始播放视频,isPlaying(),判断当前是否正在播放视频,getDuration(),获取载入的视频文件的时长,VideoView,常用方法,创建,VideoView,视频播放,为,VideoView,添加控制器,10.3,多媒体,VideoView videoView =(VideoView)findViewById(R.id.videview);,/,播放本视频,videoView.setVideoPath(xxxx);,/,加载网络视频,videoView.setVideoURI(Uri.parse(https:/xxxx);,videoView.start();,使用,VideoView,播放视频时可以添加一个控制器,MediaController,,这是一个包含美丽播放器控件的视图,包含一些典型的按钮,像播放,/,暂停、倒带、快进与进度华东其。它管理媒体播放器的状态以保持控件的同步,示例代码如下所示:,MediaController controller=new MediaController(context);,/,为,VideoView,绑定控制器,videoView.setMediaController(controller);,10.3,多媒体,10.4.1,什么是,Material Design,Material Design,是由,Google,的设计工程师们基于传统优秀的设计原则,结合丰富的创意和科学技术所开发的一套全新的界面设计语言,包含了视觉、运动、互动效果等特性。为了做出表率,,Google,从,Android 5.0,系统开始,就将所有内置的应用都使用,Material Design,风格进行设计。,10.4 Material Design,体验,10.4.2 Toolbar,Toolbar,控件是由,appcompat-v7,库提供的。添加控件的时候需要为,Toolbar,制定一个,id,,并将它的宽度设置为,match_parent,,高度设置为,?attr/actionBarSize,即,ActionBar,高度。,10.4 Material Design,体验,不过只有一个标题的,Toolbar,看起来太单调了,我们还可以再添加一些,action,按钮来让,Toolbar,更加丰富一些。创建一个,toolbar.xml,菜单文件,并编写如下代码:,10.4 Material Design,体验,最后在,Activity,中编写如下代码来启用,Toolbar,和创建的菜单:,10.4 Material Design,体验,public class MainActivity extends AppCompatActivity,Override,public boolean onCreateOptionsMenu(Menu menu),getMenuInflater().inflate(R.menu.toolbar,menu);,return true;,Override,public boolean onOptionsItemSelected(MenuItem item),switch(item.getItemId(),case R.id.backup:,Toast.makeText(this,You click Backup,Toast.LENGTH_SHORT).show();,break;,case R.id.mail:,return true;,10.4.3,活动菜单,活动菜单是,Material Design,中最常见的效果之一,借助,Google,提供的各种工具,我们可以轻松的实现炫酷的活动菜单效果。,DrawerLayout,使用,NavigationView,的使用,10.4 Material Design,体验,在,Android,开发中,避免不了用到动画,,Android,中的动画分为补间动画和逐帧动画两种。,10.5,动画,补间动画,通过对,View,中内容进行一系列的图形变换来实现动画效果,其中图形变化包括平移、缩放、旋转、改变透明度等。,按照事先准备好的静态图像顺序播放的,利用人眼的“视觉暂留”原理,给用户造成动画的错觉。,逐帧动画,10.5.1,补间动画,在,Android,中,提供了四种补间动画:,透明度渐变动画(,AlphaAnimation,),旋转动画(,RotateAnimation,),缩放动画(,ScaleAnimation,),平移动画(,TranslateAnimation,),10.5,动画,透明度渐变动画(,AlphaAnimation,),透明度渐变动画是通过改变,View,组件透明度来实现的渐变效果。它主要通过为动画指定开始时的透明度、结束时的透明度以及动画持续时间来创建动画。,10.5,动画,10.5,动画,控制动画的变化速度(匀速),设置动画重复的方式(反向),设置动画重复次数(无限循环),指定动画播放时长,指定动画开始时的透明度(不透明),指定动画结束时的透明度(透明),旋转动画(,RotateAnimation,),旋转动画是通过为动画指定开始时的旋转角度、结束时的旋转角度以及动画播放时长来创建动画的。,10.5,动画,10.5,动画,指定动画开始时的角度(原始位置),指定动画结束时的角度(,360,),指定轴心的,X,坐标,指定轴心的,Y,坐标,缩放动画(,ScaleAnimation,),缩放动画是通过为动画指定开始时的缩放系数、结束时的缩放系数以及动画持续时长来创建动画的。,10.5,动画,10.5,动画,指定动画开始时,X,轴上的缩放系数(不变化),指定动画开始时,Y,轴上的缩放系数(不变化),指定动画结束时,X,轴上的缩放系数(缩小,0.5,倍),指定动画结束时,Y,轴上的缩放系数(缩小,0.5,倍),平移动画(,TranslateAnimation,),平移动画就通过为动画指定开始位置、结束位置以及动画持续时长来创建动画的。,10.5,动画,10.5,动画,指定动画开始时,View,的,X,轴坐标(原始位置),指定动画开始时,View,的,Y,轴坐标(原始位置),指定动画结束时,View,的,X,轴坐标,指定动画结束时,View,的,Y,轴坐标(原始位置),10.5.2,逐帧动画,逐帧动画是按照准备好的静态图像顺序播放的,利用人眼的“视觉暂留”原理,造成动画的错觉。,逐帧动画的原理与放胶片看电影的原理是一样的,它们都是一张一张地播放事先准备好的静态图像。,10.5,动画,2,3,功能描述:,技术要点:,用户交互界面的设计与实现,引入图片资源,创建,Frame,动画文件,编写界面逻辑代码,案例代码(详见教材,P290P292,),实现步骤:,播放逐帧动画,掌握实现逐帧动画步骤,1,10.5,动画,10.6,小结,本章主要讲解了,Android,开发中常用的,Notification,、摄像头与相册、多媒体播放的知识内容,并对,UI,设计库,Material Design,进行了初步了解,最后学习了动画的知识。学完本章的知识,,Android,基础内容也告一段落。希望初学者熟练掌握前面讲解的知识,为学好,Android,打好基础。,大连理工大学出版社,THANKS!,
展开阅读全文