




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android程序设计程序设计第六章第六章 Android动画与动画与 OpenGL开发开发1. Android上的上的2D动画动画武汉大学武汉大学 Google Android 联合实验室联合实验室Android 2D动画动画nAndroid中使用图形处理引擎q2D部分是android SDK内部自己提供q3D部分是用Open GL ES 1.0n大部分2D使用的api都在android.graphics和android.graphics.drawable包中q图形处理相关: Canvas、ColorFilter、Point(点)和RetcF(矩形)等q动画相关:AnimationDrawa
2、ble、BitmapDrawable和TransitionDrawable等武汉大学武汉大学 Google Android 联合实验室联合实验室Android 2D动画实现动画实现nAndroid平台提供了两类动画nTween动画q通过对场景里的对象不断进行图像变换(平移、缩放、旋转)来产生动画效果nFrame动画q顺序播放事先做好的图像,和电影类似武汉大学武汉大学 Google Android 联合实验室联合实验室Tween动画动画nTween动画通过对View内容完成一系列的图像变换(平移、缩放、旋转)来实现动画效果n四种动画效果qAlpha:渐变透明度动画效果qScale:渐变尺寸伸缩动
3、画效果qTranslate:画面转换位置动画效果qRotate:画面转移旋转动画效果武汉大学武汉大学 Google Android 联合实验室联合实验室Tween动画(动画(2)nTween动画是通过预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间n程序沿着时间线执行这些指令就可以实现动画效果。q因此首先需要定义Animation动画对象q然后设置该动画的一些属性q最后通过 startAnimation 方法来开始动画武汉大学武汉大学 Google Android 联合实验室联合实验室Tween动画属性动画属性n AlphaAnimation(float fromAlpha,
4、 float toAlpha) n功能q构建一个渐变透明度动画 n参数 qfromAlpha 为动画起始透明度qtoAlpha为动画结束透明度(0.0表示完全透明,1.0表示完全不透明)。武汉大学武汉大学 Google Android 联合实验室联合实验室Tween动画属性(动画属性(2)n ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) n功能q构建一个渐变尺寸伸缩动画n参数q
5、fromX、toX 分别是起始和结束时X坐标上的伸缩尺寸qfromY、toY分别是起始和结束时 Y坐标上的伸缩尺寸qpivotXValue、pivotYValue 分别为动画相对于物件的X、Y坐标的开始位置 、qpivotYType pivotXType 分别为x、y的伸缩模式武汉大学武汉大学 Google Android 联合实验室联合实验室Tween动画属性(动画属性(3)nTranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) n功能q构建一个画面转换位置移动动画n参数q
6、fromXDelta、fromXDelta分别为起始坐标q toXDelta、toYDelta分别为结束坐标武汉大学武汉大学 Google Android 联合实验室联合实验室Tween动画属性(动画属性(4)n RotateAnimation(float fromDegress, float toDegress, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) n功能q构建一个旋转动画n参数qfromDegress 为开始的角度qtoDegress 为结束的角度qpivotXType、pivotYTy
7、pe分别为x、y 的伸缩模式qpivotXValue、pivotYValue 分别为伸缩动画相对于x、y的坐标的开始位置武汉大学武汉大学 Google Android 联合实验室联合实验室Tween动画属性(动画属性(5)nsetDuration(long durationMillis) n功能q设置动画显示的时间 以毫秒为单位 nstartAnimation(Animation animation) n功能q开始播放动画 n参数qanimation为要播放的动画武汉大学武汉大学 Google Android 联合实验室联合实验室Frame动画动画nFrame动画使用简单q需要创建一个Anim
8、ationDrawabledF对象来表示Frame动画q然后通过addFrame 方法把每一帧要显示的内容添加进去q最后通过start 方法就可以播放这个动画了q同时还可以通过 setOneShot方法设置是否重复播放nFrame动画主要是通过AnimationDrawable类来实现武汉大学武汉大学 Google Android 联合实验室联合实验室Frame动画(动画(2)nFrame动画通过AnimationDrawable类的start()和stop()两个重要的方法来启动和停止动画nFrame动画一般通过XML文件配置q在工程的res/anim目录下创建一个XML配置文件q该配置文件
9、有一个根元素和若干个子元素n主要是要将一系列图形播放出来形成动画效果武汉大学武汉大学 Google Android 联合实验室联合实验室Frame动画(动画(3)n准备素材q即要播放的动画的逐帧图像n新建一个AnimationDrawable对象,把这些图片加载进去frameAnimation = new AnimationDrawable(); for (int i = 0; i 10; i+) int id = getResources().getIdentifier(load + (i+1), drawable, this.getContext().getPackageName(); f
10、rameAnimation.addFrame(getResources().getDrawable(id), 100);/设置循环播放 false表示循环 true表示不循环,仅播放一次frameAnimation.setOneShot(false); 武汉大学武汉大学 Google Android 联合实验室联合实验室Frame动画(动画(4)nAnimationDrawable 类是Drawable类的子类,q可以将 AnimationDrawable 设为背景等来查看效果n最后只要调用 frameAnimation.start();q可以启动该Frame动画n需要在res/layout目
11、录下创建layout配置文件nFrame动画简单、代码量小2. OpenGL基础基础武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL简介简介nOpenGLqOpen Graphics Library(开放图形库)q二维/三维的计算机图形和模型库q与硬件无关的软件接口q源于SGI(Silicon Graphics inc.)公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGLnOpenGL已成为开放的国际图形标准武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的发展的发展n1992年7月,SGI公司发布了O
12、penGL的1.0版本q随后又与微软公司共同开发了Windows NT版本的OpenGLq从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用n1995年OpenGL的1.1版本发布q该版本比1.0的性能有许多提高,并加入了一些新的功能q提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等n2003年的7月28日,SGI和ARB公布了OpenGL 1.5q包括OpenGL ARB的正式扩展规格绘制语言“OpenGL Shading Language”q新增功能:顶点Buffer Object、Shadow功能、隐蔽查询、非乘
13、方纹理等n2004年8月,OpenGL2.0版本发布q支持OpenGL Shading Language、新的shader扩展特性以及其他多项增强特性武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的发展(的发展(2)n2008年8月初,Khronos工作组在Siggraph 2008大会上宣布了OpenGL 3.0图形接口规范q新增功能:顶点矩阵对象,全帧缓存对象功能,32bit浮点纹理和渲染缓存等n2009年3月,发布升级版新规范OpenGL 3.1qOpenGL着色语言“GLSL”从1.30版升级到了1.40版q通过改进程序增强了对最新可编程图形硬件的访问
14、,还有更高效的顶点处理、扩展的纹理功能、更弹性的缓冲管理等等n2009年8月,发布OpenGL 3.2q提升了性能表现、改进了视觉质量、提高了几何图形处理速度等,并可用于并行n2010年7月26日,发布OpenGL 4.1和OpenGL OpenGL Shading Language 4.10q提高视觉密集型应用OpenCL的互操作性等特点n推出GLSL 1.5OpenGLShading Language(OpenGL着色语言)的升级版武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的功能的功能n 模型绘制 q绘制点、线和多边形,构造三维模型n 模型观察q建立变
15、换(坐标变换,投影变换,视窗变换)n 颜色模式的指定qRGBA模式和颜色索引模式n 光照应用n 图象效果增强q反走样、混合和雾化n 位图和图象处理n 纹理映射n 实时动画q双缓存技术(double buffer)n 交互技术q提供人机交互的接口武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的特点的特点n从程序开发人员的角度来看,OpenGL是一组绘图命令的API集合,具有如下特性n跨平台特性qOpenGL与硬件、窗口和操作系统是相互独立的:可以集成到各种标准窗口和操作系统中qOpenGL图形函数定义独立于任何程序设计语言:在各种编程语言中,如C,C+,FORT
16、RAIN,Ada和Java等,都可以调用OpenGL的库函数武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的特点(的特点(2)n应用的广泛性q目前最主要的二、三维交互式图形应用程序开发环境q业界最受推荐的图形应用编程接口n网络透明性q允许一个运行在工作站上的进程在本机或通过网络在远程工作站上显示图形武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的特点(的特点(3)n高质量和高性能q高质量和高效率的图形生成能力得到充分的体现n出色的编程特性q在各种平台上已有多年的应用实践,加上严格的规范控制,因此OpenGL具有良好的稳定性q具
17、有充分的独立性与易使用性等武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的工作方式的工作方式 n完整的窗口系统的OpenGL图形处理系统的结构q最底层为图形硬件q第二层为操作系统q第三层为窗口系统q第四层为OpenGLq最上层为应用软件应用软件OpenGL窗口系统操作系统图形硬件武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的流水线的流水线 n当应用程序进行OpenGL API函数调用时,OpenGL命令将被放在一个命令缓冲区中q命令缓冲区中包含了大量的命令、顶点数据和纹理数据q当这个缓冲区被清空时,缓冲区中的命令和数据都将传
18、递给流水线的下一个阶段OpenGLCommand BufferRasterizationT&LFrame bufferOpenGLAPI Calls武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL的组成的组成nOpenGL是一种API,包括了多个图形函数,主要由以下函数库组成qOpenGL核心库:glqOpenGL实用程序库: gluqOpenGL编程辅助库:auxqOpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glutqWindows专用库:wglqWin32 API函数库武汉大学武汉大学 Google Andr
19、oid 联合实验室联合实验室函数命名约定函数命名约定nOpenGL函数都遵循一个命名约定,即采用以下格式qn例如函数glColor3f()qgl表示这个函数来自库gl.hqcolor表示该函数用于颜色设定q3f表示这个函数采用了三个浮点数参数3. Android OpenGL应用开发应用开发武汉大学武汉大学 Google Android 联合实验室联合实验室Android OpenGL ES武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL ESnOpenGL ES (OpenGL for Embedded Systems) qOpenGL 三维图形 API 的子
20、集q针对手机、PDA和游戏主机等嵌入式设备而设计q该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准nOpenGL- ES 免授权费、跨平台的、功能完善的2D和3D图形应用程序接口API武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL ES(2)nOpenGL ES 是从 OpenGL 裁剪的定制而来的q去除了 glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性n经过多年发展,现在主要有两个版本qOpenGL ES 1.x 针
21、对固定管线硬件的qOpenGL ES 2.x 针对可编程管线硬件武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL ES(3)nOpenGL ES 1.0 是以 OpenGL 1.3 规范为基础,OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础q它们分别又支持 common 和 common lite两种profileqlite profile只支持定点实数,而common profile既支持定点数又支持浮点数n OpenGL ES 2.0参照 OpenGL 2.0 规范定义qcommon profile发布于2005-8,引入了对可编程管线的
22、支持武汉大学武汉大学 Google Android 联合实验室联合实验室Android的的client和和server架构架构n3D接口调用OpenGLClientServer武汉大学武汉大学 Google Android 联合实验室联合实验室Android OpenGL系统结构系统结构武汉大学武汉大学 Google Android 联合实验室联合实验室Android OpenGL的的JAVA和和JNInAndroid系统使用OpenGL的标准接口来支持3D图形功能nAndroid 3D图形系统也分为Java框架和本地代码JNI两部分q本地代码主要实现的OpenGL接口的库q在Java框架层,
23、javax.microedition.khronos.opengles是java标准的OpenGL包qandroid.opengl包提供了OpenGL系统和Android GUI系统之间的联系武汉大学武汉大学 Google Android 联合实验室联合实验室Android OpenGL的的JAVA和和JNI(2)nAndroid的本地代码位于qframeworks/base/openglnJNI代码位于qframeworks/base/core/com_google_android_gles_jni_GLImpl.cppqframeworks/base/core/com_google_and
24、roid_gles_jni_EGLImpl.cppnJava类位于qopengl/java/javax/microedition/khronos武汉大学武汉大学 Google Android 联合实验室联合实验室 OpenGL ES测试代码测试代码nOpenGL的本地测试代码路径qframeworks/base/opengl/testsn包括angeles、fillrate等14个测试代码q这些代码都可以通过终端进行本地调用测试(模拟器中使用adb shell)n使用 Surface的代码qframeworks/base/libs/surfaceflinger/DisplayHardware/
25、DisplayHardware.cpp武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL ES的编译的编译n编译libagl下的源码生成qInstall: out/target/product/generic/system/lib/egl/libGLES_android.son编译libs下的生成qInstall: out/target/product/generic/system/lib/libGLESv2.soqInstall: out/target/product/generic/system/lib/libGLESv1_CM.soqInstall: out
26、/target/product/generic/system/lib/libEGL.so武汉大学武汉大学 Google Android 联合实验室联合实验室使用使用OpenGL ES基本步骤基本步骤n获取Display,Display代表显示器n函数原型qEGLDisplay eglGetDisplay(NativeDisplayType display);ndisplay参数是native系统的窗口显示ID值q一般为 EGL_DEFAULT_DISPLAY q该参数实际的意义是平台实现相关的:在X-Window下是XDisplay ID在MS Windows下是Window DC武汉大学武汉
27、大学 Google Android 联合实验室联合实验室使用使用OpenGL ES基本步骤(基本步骤(2)n初始化egl库n函数原型qEGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);ndpy应为一个有效的 EGLDisplay n函数返回时,major和minor将被赋予当前EGL版本号武汉大学武汉大学 Google Android 联合实验室联合实验室使用使用OpenGL ES基本步骤(基本步骤(3)n选择一个合适的EGL Configuration FrameBuffer,实际指的是FrameBu
28、ffer的参数n函数原型qEGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,EGLConfig *configs, EGLint config_size, EGLint *num_config);n参数attrib_list:指定了选择配置时需要参照的属性n参数configs:将返回一个按照attrib_list排序的平台有效的所有EGL framebuffer配置列表n参数config_size:指定了可以返回到configs的总配置个数n参数num_config: 返回了实际匹配的配置总数武汉大学武汉大
29、学 Google Android 联合实验室联合实验室使用使用OpenGL ES基本步骤(基本步骤(4)n创建一个可实际显示的EGLSurface,实际上就是一个FrameBuffern函数原型qEGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, NativeWindowType win, const EGLint *attrib_list);武汉大学武汉大学 Google Android 联合实验室联合实验室使用使用OpenGL ES基本步骤(基本步骤(5)n创建Contextn函数原型qEGLContext
30、 eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);n绑定Display、Surface、Contextn函数原型qEGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); 武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL ES管道管道n大部分图形系统都可以比作工厂中的装配线(As
31、semble line)或者称为管道(Pipeline)nOpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipelineq工序是固定的,但是可以通过打开或关闭开关来设置参数或者打开关闭某些功能nOpenGL ES 2.0 允许提供编程来控制一些重要的工序,一些“繁琐”的工序比如栅格化等仍然是固定的武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL ES 1.x 固定管道结构图固定管道结构图武汉大学武汉大学 Google Android 联合实验室联合实验室GLSurfaceViewnGLSurfaceView 为android.open
32、gl 包中核心类q起到连接OpenGL ES与Android 的View层次结构之间的桥梁作用q使得Open GL ES库适应于Anndroid系统的Activity生命周期q使得选择合适的Frame buffer像素格式变得容易 q创建和管理单独绘图线程以达到平滑动画效果 q提供了方便使用的调试工具来跟踪OpenGL ES函数调用以帮助检查错误武汉大学武汉大学 Google Android 联合实验室联合实验室OpengGL ES基本几何图形定义基本几何图形定义n二维图形库可以绘制点,线,多边形,圆弧,路径等等nOpenGL ES 支持绘制的基本几何图形分为三类q点q线段q三角形nOpenG
33、L ES 只能绘制这三种基本几何图形q任何复杂的2D或是3D图形都是通过这三种几何图形构造而成武汉大学武汉大学 Google Android 联合实验室联合实验室复杂复杂3D图形的绘制图形的绘制n复杂的3D图形,都会将其分割成细小的三角形面而构成n然后通过以下步骤进行绘制q上色(Color)q添加材质(Texture)q添加光照(lighting)q构造3D效果的图形武汉大学武汉大学 Google Android 联合实验室联合实验室顶点的定义顶点的定义n点,线段,三角形都是通过顶点来定义q顶点数组来定义n对应平面上的一系列顶点q可以看出一个个孤立的点(Point)q也可以两个两个连 接成线段
34、(Line Segment) q也可以三个三个连成三角形(Triangle)n对一组顶点的不同解释可定义Android OpenGL ES中的基本几何图形武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL ES空间几何图形绘制方法空间几何图形绘制方法n函数原型qpublic abstract void glDrawArrays(int mode, int first, int count)qmode 为上述解释顶点的模式n使用VetexBuffer 来绘制n顶点的顺序由vertexBuffer中的顺序指定武汉大学武汉大学 Google Android 联合实验室联
35、合实验室OpenGL ES空间几何图形绘制方法(空间几何图形绘制方法(2)n函数原型qpublic abstract void glDrawElements(int mode, int count, int type, Buffer indices)qmode 为上述解释顶点的模式n可以重新定义顶点的顺序n顶点的顺序由indices Buffer 指定武汉大学武汉大学 Google Android 联合实验室联合实验室OpenGL ES空间几何图形绘制示例空间几何图形绘制示例n定义三个顶点坐标,并把它们存放在FloatBuffer 中float vertexArray = new float -0.8f , -0.4f * 1.732f , 0.0f , 0.8f , -0.4f * 1.732f , 0.0f , 0.0f , 0.4f * 1.732f , 0.0f , ; ByteBuffer vbb = ByteBuffer.allocateDirect(vertexArray.length*4);vbb.order(ByteOrder.nativeOrder();FloatBuffer vertex = vbb.asFloatBuffer();vertex.put(vertexArray);vertex.position(0);武汉大学武汉大学 Google
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 神木六年级科学试卷及答案
- 汕尾市高三数学试卷及答案
- 山东高二联考试卷及答案
- 2025年咖啡店装修设计合同范本
- 聚芳族聚酰胺纤维在复合材料加固的应用考核试卷
- 毛皮服装CADCAM技术应用考核试卷
- 城际铁路运营维护成本控制考核试卷
- 砼构件预制件的模具使用寿命延长考核试卷
- 2025装修合同签订范本「」
- 海上油气平台设计的抗地震性能提升方法考核试卷
- 自主智能系统知到课后答案智慧树章节测试答案2025年春哈尔滨工程大学
- GB/T 6433-2025饲料中粗脂肪的测定
- 服务消费券发放的精细化实施方案
- 2019版 浙科版 高中生物学 必修2 遗传与进化《第二章 染色体与遗传》大单元整体教学设计2020课标
- 【MOOC期末】《介入放射学》(东南大学)中国大学慕课答案
- DB50T 771-2017 地下管线探测技术规范
- 防灾减灾培训(安全行业讲座培训课件)
- 2024年《BIM技术介绍》课件
- 情景教学法在小学英语课堂中的有效运用研究(开题报告)
- 花键计算公式DIN5480
- 《荷塘月色》课件+2024-2025学年统编版高中语文必修上册
评论
0/150
提交评论