• 1. 第十章 高级编程图形图像处理 动画 多媒体 传感器 Fragment
  • 2. ✎ 学习目标重点了解掌握2多媒体图形图像处理 动画 Fragment13 传感器
  • 3.  目录让IT教学更简单,让IT学习更有效图形图像处理动画多媒体☞点击查看本小节知识架构传感器☞点击查看本小节知识架构☞点击查看本小节知识架构☞点击查看本小节知识架构10.110.210.310.4
  • 4.  目录让IT教学更简单,让IT学习更有效本章小结 Fragment☞点击查看本小节知识架构10.510.6
  • 5.  知识架构10.1.1常用的绘图类为图片添加特效 案例——刮刮卡10.1.210.1.310.1 图形图像处理返回目录
  • 6.  知识架构10.2 动画返回目录补间动画(Tween Animation)逐帧动画(Frame Animation)10.2.110.2.2
  • 7.  知识架构10.3 多媒体返回目录MediaPlayer播放音频SoundPool播放音频 VideoView播放视频10.3.110.3.210.3.3 MediaPlayer和SurfaceView播放视频10.3.4 案例——视频播放器10.3.5
  • 8.  知识架构10.4.1传感器简介传感器的使用 案例——摇一摇10.4.210.4.310.4 传感器返回目录
  • 9.  知识架构10.5 Fragment返回目录Fragment简介Fragment的生命周期创建Fragment10.5.110.5.210.5.3Fragment与Activity间通信10.5.4案例——设置界面10.5.5
  • 10. 让IT教学更简单,让IT学习更有效10.1 图形图像处理10.1.1 常用的绘图类Android中绘制图像时,最常用就是Bitmap类、BitmapFactory类、Paint类和Canvas类。 Bitmap类:代表位图 BitmapFactory类:顾名思义就是位图工厂 ,它是一个工具类。 Paint类:代表画笔 Canvas类:代表画布
  • 11. 让IT教学更简单,让IT学习更有效10.1 图形图像处理10.1.1 常用的绘图类Bitmap类 Bitmap类代表位图,是Android中图像处理一个非常重要的类。 创建Bitmap Config config = Config.ARGB_4444; Bitmap bitmap = Bitmap.createBitmap(width, height, config);
  • 12. 让IT教学更简单,让IT学习更有效10.1 图形图像处理10.1.1 常用的绘图类BitmapFactory类 BitmapFactory类是一个工具类,主要用于从不同的数据源来解析、创建Bitmap对象。 创建Bitmap对象 解析内存卡中的图片文件并创建对应的Bitmap对象 Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/meinv.jpg"); 解析Drawable文件夹中的图片文件并创建相应的Bitmap对象 Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
  • 13. 让IT教学更简单,让IT学习更有效10.1 图形图像处理10.1.1 常用的绘图类Paint类 Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。使用Paint类时,首先要创建它的实例对象,然后通过该类提供的方法来更改Paint对象的默认设置。 创建Paint 创建一个画笔,指定画笔颜色为红色,并带灰色阴影 Paint paint = new Paint(); paint.setColor(Color.RED); paint.setShadowLayer(2, 3, 3, Color.GRAY);
  • 14. 让IT教学更简单,让IT学习更有效10.1 图形图像处理10.1.1 常用的绘图类Canvas类 Canvas类代表画布,通过该类提供的方法,可以绘制各种图形(如矩形、圆形、线条等) 在画布上使用画笔绘制矩形 public class MyPicture extends View { ……… @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(Color.RED); paint.setShadowLayer(2, 3, 3, Color.GRAY); Rect r = new Rect(40, 40, 200, 100); canvas.drawRect(r, paint); } }
  • 15. 让IT教学更简单,让IT学习更有效10.1 图形图像处理10.1.2 为图片添加特效在日常生活中,人们经常会使用的美图秀秀为图片添加特效。例如,对图片进行旋转、缩放、倾斜等。在Android中对图片添加特效需要使用Matrix类。 使用Matrix类设置图片旋转 Matrix matrix = new Matrix(); //创建Matrix对象 matrix.setRotate(30); //设置Matrix旋转30° canvas.drawBitmap(bitmap, matrix, paint);
  • 16. 让IT教学更简单,让IT学习更有效10.1 图形图像处理10.1.3 案例——刮刮卡日常生活中,抽奖是被大多数人们喜欢的一项活动。抽奖的形式有很多种,例如彩票、刮刮卡等。 在Android系统要实现刮刮卡的效果,需要用到Bitmap、Matrix、Canvas等类。接下来通过一个案例来演示刮刮卡的实现过程。
  • 17. 10.2 动画在Android开发中,避免不了需要用到动画,Android中的动画通常可以分为逐帧动画和补间动画两种。 补间动画 逐帧动画透明度渐变动画 旋转动画 缩放动画 平移动画 动画
  • 18. 10.2 动画 1、补间动画(Tween Animation) 通过对View中的内容进行一系列的图形变换来实现动画效果,其中图形变化包括平移、缩放、旋转、改变透明度等。补间动画的效果可以通过XML文件来定义。 2、逐帧动画(Frame Animation) 就是按顺序播放事先准备好的静态图像,利用人眼的“视觉暂留”原理,给用户造成动画的错觉。放胶片看电影的原理与逐帧动画的原理是一样的,它们都是一张一张地播放事先准备好的静态图像。
  • 19. 让IT教学更简单,让IT学习更有效10.2 动画10.2.1 补间动画(Tween Animation)透明度渐变动画(AlphaAnimation) 透明度渐变动画是指通过改变View组件透明度来实现的渐变效果。它主要通过为动画指定开始时的透明度、结束时的透明度以及动画持续时间来创建动画。 XML中透明度渐变动画基本语法:
  • 20. 让IT教学更简单,让IT学习更有效10.2 动画10.2.1 补间动画( Tween Animation)旋转动画( RotateAnimation) 旋转动画是通过为动画指定开始时的旋转角度、结束时的旋转角度以及动画播放时长来创建动画的。 XML中旋转动画基本语法: 21. 让IT教学更简单,让IT学习更有效10.2 动画10.2.1 补间动画(Tween Animation)缩放动画(ScaleAnimation) 缩放动画是通过为动画指定开始时的缩放系数、结束时的缩放系数以及动画持续时长来创建动画的。 XML中缩放动画基本语法:
  • 22. 让IT教学更简单,让IT学习更有效10.2 动画10.2.1 补间动画(Tween Animation)平移动画(TranslateAnimation) 平移动画是通过为动画指定开始位置、结束位置以及动画持续时长来创建动画的。 XML中平移动画基本语法:
  • 23. 让IT教学更简单,让IT学习更有效10.2 动画10.2.1 补间动画(Tween Animation)通过前面的讲解,大家了解了Android中的4种补间动画。为了让初学者看到直观效果,接下来通过一个案例来演示这几种动画的效果。
  • 24. 让IT教学更简单,让IT学习更有效10.2 动画10.2.2 逐帧动画(Frame Animation)逐帧动画就是按顺序播放事先准备好的静态图像,利用人眼的“视觉暂留”原理,给用户造成动画的错觉。 在Android中定义逐帧动画的步骤如下所示: 将准备好的图片放入程序的res/ drawable目录下; 在res/ drawable目录下定义动画文件(如frame.xml); 为指定控件绑定动画效果,并调用AnimationDrawable类的start()方法开启动画。
  • 25. 让IT教学更简单,让IT学习更有效10.2 动画10.2.2 逐帧动画(Frame Animation)为了让初学者更好学习Frame动画,接下来通过一个案例来讲解如何在XML文件中定义Frame动画以及在代码中加载Frame动画资源。
  • 26. 让IT教学更简单,让IT学习更有效10.3 多媒体10.3.1 MediaPlayer播放音频MediaPlayer用于播放音频和视频的,它对多种格式音频文件提供了非常全面的控制方法,从而使得播放音乐的工作变得十分简单。 MadiaPlayer主要方法如下:方法声明功能描述setDataSource()设置要播放的音频文件的位置prepare()在开始播放之前调用这个方法完成准备工作start()开始或继续播放音频pause()暂停播放音频reset()将MediaPlayer对象重置到刚刚创建的状态seekTo()从指定位置开始播放音频stop()停止播放音频,调用该方法后MediaPlayer对象无法在播放音频release()释放掉与MediaPlayer对象相关的资源isPlaying()判断当前MediaPlayer是否正在播放音频getDuration获取载入的音频文件的时长
  • 27. 10.3 多媒体10.3.1 MediaPlayer播放音频为了让初学者更好的掌握MediaPlayer的使用,接下来通过示例代码来演示MediaPlayer播放音频的完整过程。 1、创建MediaPlayer MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 2、设置数据源 mediaPlayer.create(this, R.raw.xxx); // 播放res/raw目录的音频文件 mediaPlayer.setDataSource("mnt/sdcard/xxx.mp3"); // 播放SD卡中的音频文件 mediaPlayer.setDataSource("http://www.xxx.mp3"); ……..
  • 28. 让IT教学更简单,让IT学习更有效10.3 多媒体10.3.2 SoundPool播放音频在游戏开发中,经常需要播放一些游戏音效(比如:子弹爆炸,物体撞击等),这些音效的共同特点是短促、密集、延迟程度小。在这样的场景下,可以使用SoundPool代替MediaPlayer来播放这些音效。 1、创建SoundPool对象 SoundPool soundPool = new SoundPool(int maxStreams, int streamType, int srcQuality); ……….
  • 29. 让IT教学更简单,让IT学习更有效10.3 多媒体10.3.3 VideoView播放视频在Android中,播放视频主要使用VideoView或者SurfaceView,其中VideoView组件播放视频最简单,它将视频的显示和控制集于一身,因此,借助它就可以完成一个简易的视频播放器。方法声明功能描述setVideoPath()设置要播放的视频文件的位置start()开始或继续播放视频pause()暂停播放视频resume()将视频重头开始播放seekTo()从指定位置开始播放视频isPlaying()判断当前是否正在播放视频getDuration()获取载入的视频文件的时长
  • 30. 让IT教学更简单,让IT学习更有效10.3 多媒体10.3.3 VideoView播放视频学习了VideView是如何创建以及它的主要方法之后,为了让初学者更好的掌握VideView的使用,接下来编写一个案例来演示VideoView播放视频的步骤。
  • 31. 让IT教学更简单,让IT学习更有效10.3 多媒体10.3.4 MediaPlayer和SurfaceView播放视频Android系统中,还提供另一种播放视频的方式,MediaPlayer和SurfaceView结合使用。 MediaPlayer可以播放视频,只不过它在播放视频时没有图像输出,因此需要使用SurfaceView组件展现图像。与VideoView相比,这种方式更易于扩展。MediaPlayerSurfaceView
  • 32. 让IT教学更简单,让IT学习更有效10.3 多媒体10.3.4 MediaPlayer和SurfaceView播放视频SurfaceView组件继承自View,用于显示图像的组件。SurfaceView最大的特点就是它的双缓冲技术,所谓的双缓冲技术是在它内部有两个线程,例如线程A和线程B。当线程A更新界面时线程B进行后台计算操作,当两个线程都完成各自的任务时它们会互相交换。线程A进行后台计算,线程B进行更新界面,两个线程就这样无限循环交替更新和计算。A线程B线程更新界面后台计算
  • 33. 让IT教学更简单,让IT学习更有效10.3 多媒体10.3.5 案例——视频播放器在了解了SurfaceView控件的使用之后,接下来使用MediaPlayer和SurfaceView开发一个案例“视频播放器”来更详细的说明SurfaceView在项目中的应用。
  • 34. 让IT教学更简单,让IT学习更有效10.4 传感器10.4.1 传感器简介Android手机通常都会支持多种类型的传感器,如光照传感器、加速度传感器、地磁传感器、压力传感器、温度传感器等。 Android系统负责将这些传感器所输出的信息传递给开发者, 开发者可以利用这些信息开发很多应用。例如,市场上的赛车游戏使用的就是重力传感器、微信的摇一摇使用的是加速度传感器、手机指南针使用的是地磁传感器。
  • 35. 让IT教学更简单,让IT学习更有效10.4 传感器10.4.1 传感器简介Android系统提供了一个类android.hardware.Sensor代表传感器,该类将不同的传感器封装成了常量,具体如表所示。 传感器类型常量内部整数值中文名称Sensor.TYPE_ACCELEROMETER1加速度传感器Sensor.TYPE_MAGNETIC_FIELD2磁力传感器Sensor.TYPE_ORIENTATION3方向传感器(废弃,但依然可用)Sensor.TYPE_GYROSCOPE4陀螺仪传感器Sensor.TYPE_LIGHT5环境光照传感器Sensor.TYPE_PRESSURE6压力传感器Sensor.TYPE_TEMPERATURE7温度传感器(废弃,但依然可用)Sensor.TYPE_PROXIMITY8距离传感器Sensor.TYPE_GRAVITY9重力传感器Sensor. TYPE_LINEAR_ACCELERATION10线性加速度Sensor.TYPE_ROTATION_VECTOR11旋转矢量Sensor. TYPE_RELATIVE_HUMIDITY12湿度传感器Sensor.TYPE_AMBIENT_TEMPERATURE13温度传感器(4.0之后替代TYPE_TEMPERATURE)
  • 36. 使用传感器的步骤如下所示: 1、获取所有传感器 SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 2、获取指定传感器 Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_GRAVITY); 3、为传感器注册监听事件 sm.registerListener(SensorEventListener listerner,Sensor sensor,int rate); 4、注销传感器 sm.unregisterListener(listener); 需要注意,由于模拟器不支持传感器,因此以下操作都是在真机完成。10.4 传感器10.4.2 传感器的使用
  • 37. 让IT教学更简单,让IT学习更有效10.4 传感器10.4.3 案例——摇一摇相信每个人手机中都有微信这个软件,而且大家对微信摇一摇功能再熟悉不过,这个功能使用的就是加速度传感器(ACCELEROMETER),接下来开发一个程序模仿微信摇一摇的功能。
  • 38. 让IT教学更简单,让IT学习更有效10.5 Fragment10.5.1 Fragment简介Fragment(碎片)是一种可以嵌入在Activity中的UI片段,它能让程序更加合理地利用大屏幕空间,因而Fragment在平板上应用的非常广泛。 Fragment需要包含在Activity中,一个Activity里面可以包含一个或者多个Fragment,而且一个Activity可以同时展示多个Fragment。同时,Fragment也能具有自己的布局。
  • 39. 让IT教学更简单,让IT学习更有效10.5 Fragment10.5.2 Fragment的生命周期Fragment生命周期有三种状态: 运行状态:当一个Fragment是可见的,并且它所关联的Activity正处于运行状态,那么该Fragment也处于运行状态。 暂停状态:当一个Activity进入暂停状态(另一个未占满屏幕的Activity并添加到了栈顶时),与它相关联的可见Fragment也会进入暂停状态。 停止状态:当一个Activity进入停止状态时,与它相关联的Fragment就会进入到停止状态。或者通过调用FragmentTransaction的remove()、replace()方法将Fragment从Activity中移除。
  • 40. 让IT教学更简单,让IT学习更有效10.5 Fragment10.5.3 创建Fragment要创建一个Fragment必须创建一个类继承自Fragment。 需要注意的是,Android系统提供了两个Fragment类,这两个类分别是android.app.Fragment和android.support.v4.app.Fragment。继承android.app.Fragment类则程序只能兼容4.0以上的系统,继承android.support.v4.app.Fragment类可以兼容低版本的Android系统。
  • 41. 让IT教学更简单,让IT学习更有效10.5 Fragment10.5.4 Fragment与Activity间通信虽然Fragment是嵌套在Activity中显示的,但是Fragment和Activity都是各自存在于一个独立的类中,它们之间并没有明显的方式来直接进行通信。 1、在Activity中获取Fragment实例 SettingListFragment fListFragment = (SettingListFragment) getFragmentManager().findFragmentById(R.id.settingcontent); 2、在Fragment中获取Activity实例 MainActivity activity = (MainActivity)getActivity();
  • 42. 让IT教学更简单,让IT学习更有效10.5 Fragment10.5.5 案例——设置界面为了让初学者更好地掌握Fragment的使用,接下来通过一个“设置界面”的案例,来演示如何在一个Activity中展示两个Fragment(一个用于展示设置图标,一个用于展示设置内容)并实现Activity与Fragment通信功能。
  • 43. 10.6 本章小结本章详细讲解了图形图像处理、多媒体、动画、传感器、Fragment等知识点。这些知识属于Android中的高级知识,因此需要初学者在学习本章之前,必须先熟练掌握前面讲解的知识,打好Android基础。