1、Android移动开发基础案例教程第10章 高级编程 Fragment Android5.0新特性 图形图像处理 动画、多媒体作业点评 GET方式提交数据和POST方式提交数据的区别。 Handler消息机制中四个关键对象的作用。 Android中的补间动画与逐帧动画的区别 Fragment的生命周期预习检查10.4 Fragment 10.1 图形图像处理 10.2 动画10.3 多媒体主讲内容图形图像处理常用类l Bitmap是可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。l BitmapFactory是位图工厂,它是一个工具类。l Paint代表画笔,
2、用来描述图形的颜色及风格。l Canvas代表画布,通过该类提供的方法,可以绘制各种图形。l Matrix为图片添加特效的效果。图形图像处理方法名称方法名称功能描述功能描述createBitmap(int width, int height, Config config)创建位图,width代表要创建的图片的宽度,height代表高度,config代表图片的配置信息createBitmap(int colors, int offset, int stride,int width, int height, Config config)使用颜色数组创建一个指定宽高的位图,颜色数组的个数为width
3、*heightcreateBitmap(Bitmap src)使用源位图创建一个新的BitmapcreateBitmap(Bitmap source, int x, int y, int width, int height)从源位图的指定坐标开始“挖取”指定宽高的一块图像来创建新的Bitmap对象createBitmap(Bitmap source, int x, int y, int width, int height,Matrix m, boolean filter)从源位图的指定坐标开始“挖取”指定宽高的一块图像来创建新的Bitmap对象,并按照Matrix规则进行变换isRecycle
4、d()判断Bitmap对象是否被回收recycle()回收Bitmap对象Bitmap常用方法常用方法10.1.1 Bitmap类创建Bitmap实例 Bitmap.Config config = Config.ARGB_4444; Bitmap bitmap = Bitmap.createBitmap( width, height, config );10.1.1 Bitmap类方法名称方法名称功能描述功能描述decodeFile(String pathName)从指定文件中解析、创建Bitmap对象decodeStream(InputStream is)从指定输入流中解析、创建Bitmap
5、对象decodeResource(Resources res, int id)根据给定的资源id,从指定资源中解析、创建Bitmap对象BitmapFactory常用方法常用方法 Bitmap bitmap = BitmapFactory.decodeFile(/sdcard/meinv.jpg); Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);10.1.2 BitmapFactory类方法名称方法名称功能描述功能描述Paint()创建一个Paint对象,并使用默认属性Pa
6、int(int flags)创建一个Paint对象,并使用指定属性setColor(int color)设置颜色setAlpha(int a)设置透明度setTextSize(float textSize)设置绘制文本时的文字大小setShadowLayer(float radius, float dx, float dy, int color)设置阴影,参数radius为阴影的角度;dx和dy为阴影在x轴和y轴上的距离;color为阴影的颜色Paint常用方法常用方法 Paint paint = new Paint(); paint.setColor(Color.RED);10.1.3 Pa
7、int类方法名称方法名称功能描述功能描述drawRect(Rect r, Paint paint)使用画笔画出指定矩形drawOval(RectF oval, Paint paint)使用画笔画出指定椭圆drawCircle(float cx, float cy, float radius, Paint paint)使用画笔在指定位置画出指定半径的圆drawLine(float startX, float startY, float stopX, float stopY, Paint paint)使用画笔在指定位置画线setTextSize(float textSize)设置绘制文本时的文字大
8、小drawRoundRect(RectF rect, float rx, float ry, Paint paint)使用画笔绘制指定圆角矩形,其中rx表示X轴圆角半径,ry表示Y轴圆角半径Canvas常用方法常用方法10.1.4 Canvas类 protected void onDraw(Canvas canvas) super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(Color.RED); Rect r = new Rect(40,40,200,100); canvas.drawRect(r,paint); 10.
9、1.4 Canvas类方法名称方法名称功能描述功能描述Matrix()创建一个唯一的Matrix对象setRotate(float degrees)将Matrix对象围绕(0,0)旋转degrees度setRotate(float degrees, float px, float py)将Matrix对象围绕指定位置(px,py)旋转degrees度setScale(float sx, float sy)对Matrix对象进行缩放,参数sx代表X轴上的缩放比例,sy代表Y轴上的缩放比例setSkew(float kx, float ky)让Matirx对象倾斜,在X轴上倾斜kx,在Y轴上倾斜k
10、ysetTranslate(float dx, float dy)平移Matrix对象,(dx,dy)为Matrix平移后的坐标Matrix常用方法常用方法 Matrix matrix = new Matrix(); matrix.setRotate(30); 10.1.5 Matrix类123功能描述:技术要点: 用户交互界面的设计与实现 XML文件(activity_main.xml)的编写 实体类(MainActivity.java)的编写 界面逻辑代码的设计与实现案例代码(详见教材案例代码(详见教材PxPxx)实现步骤: 触摸手机屏幕,使图片变透明利用Android提供的类处理图片10
11、.1.6 实战演练刮刮卡10.4 Fragment 10.1 图形图像处理 10.2 动画10.3 多媒体主讲内容Android中的动画补间动画通过对View中内容进行一系列的图形变换来实现动画效果,其中图形变化包括平移、缩放、旋转、改变透明度等。按照事先准备好的静态图像顺序播放的,利用人眼的“视觉暂留”原理,给用户造成动画的错觉。逐帧动画 在Android开发中,避免不了用到动画,Android中的动画分为补间动画和逐帧动画两种。主讲内容补间动画 在Android中,提供了四种补间动画:透明度渐变动画(AlphaAnimation)旋转动画(RotateAnimation)缩放动画(Scal
12、eAnimation)平移动画(TranslateAnimation)10.2.1 补间动画(Tween Animation)透明度渐变动画 透明度渐变动画是通过改变View组件透明度来实现的渐变效果。它主要通过为动画指定开始时的透明度、结束时的透明度以及动画持续时间来创建动画。10.2.1 补间动画(Tween Animation) 透明度渐变动画文件(.xml)旋转动画 旋转动画是通过为动画指定开始时的旋转角度、结束时的旋转角度以及动画播放时长来创建动画的。10.2.1 补间动画(Tween Animation) 旋转动画文件(.xml)缩放动画 缩放动画是通过为动画指定开始时的缩放系数、
13、结束时的缩放系数以及动画持续时长来创建动画的。10.2.1 补间动画(Tween Animation) 缩放动画文件(.xml)平移动画 平移动画就通过为动画指定开始位置、结束位置以及动画持续时长来创建动画的。10.2.1 补间动画(Tween Animation) 平移动画文件(.xml)123功能描述:技术要点: 用户交互界面的设计与实现 创建四种动画文件 界面逻辑代码的设计与实现案例代码(详见教材案例代码(详见教材PxPxx)实现步骤: 创建四种补间动画编写四种动画文件10.2.1 补间动画(Tween Animation)逐帧动画 逐帧动画是按照准备好的静态图像顺序播放的,利用人眼的“
14、视觉暂留”原理,造成动画的错觉。 逐帧动画的原理与放胶片看电影的原理是一样的,它们都是一张一张地播放事先准备好的静态图像。10.2.2 逐帧动画(Frame Animation)123功能描述:技术要点: 用户交互界面的设计与实现 引入图片资源 创建Frame动画文件 编写界面逻辑代码案例代码(详见教材案例代码(详见教材PxPxx)实现步骤: 播放逐帧动画掌握实现逐帧动画步骤10.2.2 逐帧动画(Frame Animation)10.4 Fragment 10.1 图形图像处理 10.2 动画10.3 多媒体主讲内容方法名称方法名称功能描述功能描述setDataSource()设置要播放的音
15、频文件的位置prepare()在开始播放之前调用这个方法完成准备工作start()开始或继续播放音频pause()暂停播放音频reset()将MediaPlayer对象重置到刚刚创建的状态seekTo()从指定位置开始播放音频stop()停止播放音频,调用该方法后MediaPlayer对象无法在播放音频release()释放掉与MediaPlayer对象相关的资源isPlaying()判断当前MediaPlayer是否正在播放音频getDuration获取载入的音频文件的时长 MediaPlayer是用于播放音频和视频的,它支持多种格式音频文件(3gp、mp4),并提供了非常全面的控制方法。1
16、0.3.1 MediaPlayer播放音频 MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); MediaPlayer接收音频类型有很多,其中有四种较为常用的类型:l AudioManager.STREAM_MUSIC(音乐)l AudioManager.STREAM_RING(响铃)l AudioManager.STREAM_ALARM(闹钟)l AudioManager.STREAM_NOTIFICTION(提示音) 音频类型不同占据的
17、内存空间也不同,音频时间越短占的内存越小创建MediaPlayer10.3.1 MediaPlayer播放音频设置数据源 设置数据源有三种方式,分别是播放应用自带的音频文件、播放SD卡中的音频文件、播放网络音频文件。 mediaPlayer.create(this,R.raw.xxx); mediaPlayer.setDataSource(mnt/sdcard/xxx.mp3); mediaPlayer.setDataSource(http:/www.xxx.mp3);10.3.1 MediaPlayer播放音频播放本地音频文件 mediaPlayer.prepare(); mediaPlay
18、er.start(); 10.3.1 MediaPlayer播放音频 mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener(new OnPreparedListener) public void onPrepared(MediaPlayer player)mediaPlayer.start(); 播放网络音频文件10.3.1 MediaPlayer播放音频 if(mediaPlayer!=null & mediaPlayer.isPlaying()mediaPlayer.pause();暂停播放10.3.1 MediaPla
19、yer播放音频 播放状态下进行重播重新播放 暂停状态下进行重播 if(mediaPlayer!=null & mediaPlayer.isPlaying() mediaPlayer.seekTo(0); return; if(mediaPlayer!=null) mediaPlayer.seekTo(0); mediaPlayer.start();10.3.1 MediaPlayer播放音频停止播放 if(mediaPlayer!=null & mediaPlayer.isPlaying() mediaPlayer.stop(); mediaPlayer.release(); mediaPla
20、yer = null; 10.3.1 MediaPlayer播放音频VideoView方法名称方法名称功能描述功能描述setVideoPath()设置要播放的视频文件的位置start()开始或继续播放音频pause()暂停播放音频resume()将视频重新开始播放seekTo()从指定位置开始播放视频isPlaying()判断当前是否正在播放视频getDuration()获取载入的视频文件的时长 VideoView组件播放视频最简单,它将视频的显示和控制集于一身,因此,借助它就可以完成一个简易的视频播放器。10.3.2 VideoView播放视频使用VideoView 创建VideoView
21、视频的播放 VideoView videoView = (VideoView) findViewById(R.id.videoview); videoView.setVideoPath(mnt/sdcard/apple.avi); videoView.setVideoURI(Uri.parse(http:/www.xxx.avi); videoView.start();10.3.2 VideoView播放视频添加控制器 控制器MediaController是一个包含媒体播放器(MediaPlayer)控件的视图,包含了一些典型的按钮如:播放/暂停(Play/ Pause)、倒带(Rewind)
22、、快进(Fast Forward)与进度滑动器(progress slider)。它管理媒体播放器(MediaController)的状态以保持控件的同步。 MediaController controller = new MediaController(context); videoView.setMediaController(controller);10.3.2 VideoView播放视频123功能描述:技术要点: 用户交互界面的设计与实现 界面逻辑代码的设计与实现案例代码(详见教材案例代码(详见教材PxPxx)实现步骤: 播放SD卡中的视频文件通过VideoView实现播放视频10.3
23、.3 实战演练视频播放器10.4 Fragment 10.1 图形图像处理 10.2 动画10.3 多媒体主讲内容Fragment简介 Fragment(碎片)是一种可以嵌入在Activity中的UI片段,与Activity非常相似,不仅包含布局,同时也具有自己的生命周期。10.4.1 Fragment简介生命周期 Fragment不能独立存在必须嵌入到Activity中使用,所以Fragment生命周期直接受所在的Activity影响。 当Activity暂停时,它拥有的所有Fragment都暂停,当Activity销毁时,它拥有的所有Fragment都被销毁。10.4.2 Fragment
24、的生命周期Activity StateCreatedStartedFragment CallbacksonAttach()onCreate()onCreateView()onActivityCreated()onStart()onResume()ResumedPausedonPaused()StoppedonStop()DestroyedonDestriyView()onDesttroy()onDetach()10.4.2 Fragment的生命周期10.4.3 Fragment的创建 public class MyFragment extends Fragment public MyFrag
25、ment() / Required empty public constructor Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) / Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_my, container, false); 10.4.3 Fragment的创建Fragment的使用 在Activity中使用Frag
26、ment时,可以通过两种方式将Fragment添加到Activity中,一种是通过布局文件添加,一种是通过代码动态添加。 通过布局文件添加Fragment 10.4.3 Fragment的创建Fragment的使用 通过代码动态添加Fragment MyFragment fragment = new MyFragment(); FragmentManager fm = getFragmentManager(); FragmentTransaction beginTransaction = fm.beginTransaction(); beginTransaction.add(R.id.rl,f
27、ragment); beginTmit();10.4.3 Fragment的创建123功能描述:技术要点: 用户交互界面的设计与实现 创建三个Fragment 界面逻辑代码的设计与实现案例代码(详见教材案例代码(详见教材PxPxx)实现步骤: 实现三个界面进行滑动切换创建Fragment实现滑动效果10.4.4 实战演练滑动切换界面10.5 Android5.0新特性主讲内容抽屉动画 Android5.0中新增抽屉动画(DrawerLayout),通过抽屉动画可以实现侧滑效果。 . . .10.5.1 抽屉动画抽屉动画 DrawerLayout控件只需在布局文件中引入,不需要编写用户交互代码便
28、可实现侧滑效果。10.5.1 抽屉动画RecyclerView控件 Android5.0之后,谷歌公司提供了一个用于在有限的窗口范围内显示大量数据的RecyclerView控件。RecyclerView本身不参与任何视图相关的问题,它只负责回收和重用的工作。 10.5.2 RecyclerView控件SwipeRefreshLayout控件 下拉刷新是一个使用非常广泛的功能,在Android5.0之后,谷歌公司推出了一个全新的控件SwipeRefreshLayout用于实现下拉刷新,使在开发过程中更加方便简洁。10.5.3 SwipeRefreshLayout控件 10.5.3 SwipeRefreshLayout控件 本章详细讲解了图形图像处理、动画、多媒体以及Fragment等知识点。这些知识属于Android中的高级部分,因此要求初学者在学习本章之前,必须先熟练掌握前面讲解的知识,打好Android基础。10.6 本章小结 本章作业 请简要说明Android中有几种动画,以及每种动画的特点。 请简要说明Fragment生命周期包含哪些方法。