1 / 17

第六章 图形与图像处理

第六章 图形与图像处理. 倚动软件工厂实验室. 结构导图. 简单图片与逐帧动画. Android 系统提供了 ImageView 用于显示静态图片,也提供了 AnimationDrawable 来开发逐帧动画,还可以使用 Animation 对普通图片使用补间动画。 逐帧动画很适合于表演细腻的动画。例如:人物走路、说话,动物的奔跑、跳跃以及精致的 3D 效果等等。下面以一个综合的示例来示范简单图片和逐帧动画,程序运行效果如下图所示。 【 示例代码: codes6Bitmap_AnimationTest】. 简单图片. 逐帧动画. 简单图片与逐帧动画.

syshe
Download Presentation

第六章 图形与图像处理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六章图形与图像处理 倚动软件工厂实验室

  2. 结构导图

  3. 简单图片与逐帧动画 • Android系统提供了ImageView用于显示静态图片,也提供了AnimationDrawable来开发逐帧动画,还可以使用Animation对普通图片使用补间动画。 • 逐帧动画很适合于表演细腻的动画。例如:人物走路、说话,动物的奔跑、跳跃以及精致的3D效果等等。下面以一个综合的示例来示范简单图片和逐帧动画,程序运行效果如下图所示。【示例代码:codes\06\Bitmap_AnimationTest】 简单图片 逐帧动画

  4. 简单图片与逐帧动画 简单图片:前一个ImageView用于显示整个图片,鼠标在图片上点击后,会在后一个ImageView中显示该图片的局部细节。 逐帧动画:点击动画开始后,马就开始奔跑;点击动画停止,马就停止在该时刻的动作;再次点击开始,马又从第一幅图片开始奔跑。

  5. 简单图片与逐帧动画 简单图片 (1) Drawable对象 • 在Android中操作图片是通过Drawable类来完成的,Drawable类有很多子类,如BitmapDrawable类用于操作位图,ColorDrawable类用于操作颜色,ShapeDrawable类用于操作形状。Android不允许图片资源的文件名中出现大写字母,且不能以数字开头。 • 需要指出的是,R.drawable.draw1只是一个int类型的常量,代表该Drawable对象的ID,如果在Java程序中需要获得实际的Drawable对象,则可以调用Activity从android.content.ContextWrapper继承的getResources () 方法再调用Resources的getDrawable(int ID)方法来获取。

  6. 简单图片与逐帧动画 (2)Bitmap和BitmapFactory Bitmap用于表示一张位图,BitmapDrawable用于封装一个Bitmap对象。 如果想将Bitmap对象包装成BitmapDrawable对象,可以调用BitmapDrawable的构造方法。 BitmapDrawable bd=new BitmapDrawable (Bitmap bitmap) ; Bitmap bitmap=bd.getBitmap ( ) ; 如果需要获取BitmapDrawable包装的Bitmap对象,可以调用BitmapDrawable的getBitmap ( ) 方法。

  7. 简单图片与逐帧动画 Bitmap提供了一些常用方法。

  8. 简单图片与逐帧动画 注意:由于手机系统的内存较小,如果系统不停地解析创建Bitmap对象,可能会出现之前创建的Bitmap对象占用的内存尚未回收而导致程序运行时引发OutofMemory错误,这时候就需要用到recycle ()来强制回收。

  9. 简单图片与逐帧动画 BitmapFactory是一个工具类,该类所有的方法都是静态方法,这些方法可以从不同的数据源来解析、创建Bitmap对象,如资源ID、路径、文件和数据流等方式。BitmapFactory主要包含了以下方法。BitmapFactory类常用方法如下:

  10. 简单图片与逐帧动画 逐帧动画 • 创建逐帧动画的一般方法是:先在程序中存放逐帧动画的素材,再在res文件夹下创建一个anim文件夹,再在该文件夹下创建一个XML文档,在<animation-list…/>元素中添加<item…/>元素来定义动画的全部帧。 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot=["true"|"false"]> <item android:drawable="…" android:duration="…"/> </animation-list> • oneshot用于定义动画是否循环播放,为true则不循环,为false则循环播放。 • <item…/>元素中需要指定图片资源(drawable)和该图片的持续时间(duration)。 • 注意:Android也支持在代码中创建逐帧动画,调用AnimationDrawable的addFrame (Drawable frame, int duration) 方法即可,类似于使用XML方法创建时的<item…/>。

  11. 自定义绘图 除了可以使用程序中的图片资源外,Android应用还可以自行绘制图形,也可以在运行时动态地生成图片,比如游戏中人物的移动等。下面以一个自定义绘图的程序来进行示范,程序运行效果如图所示。 【示例代码:codes\06\CanvasTest】

  12. 自定义绘图 Canvas和Paint 在Swing编程中,绘图的一般思路是:自定义一个类,并让该类继承JPanel,然后重写JPanel的paint (Graphics g) 方法即可。 Android的绘图与此类似,自定义一个类,并让该类继承View,然后重写View的onDraw (Canvas canvas) 方法即可。 在Android应用中,Canvas和Paint是两个绘图的基本类,使用这两个类就几乎可以完成所有的绘制工作。 Canvas:画布,2D图形系统最核心的一个类,用于处理onDraw () 方法。 Canvas类主要实现了屏幕的绘制过程,其中包含了很多实用的方法,比如绘制一条路径、区域、贴图、画点、画线、渲染文本,Canvas常用方法包括以下几种: drawBitmap (Bitmap bitmap, float left, float top, Paint paint) :绘制位图 drawCircle (float cx, float cy, float radius, Paint paint) :绘制圆形

  13. 自定义绘图 Paint:画笔,用于设置绘制的样式、颜色等信息。Paint类常用方法有: setAlpha (int a) :设置透明度 setColor (int color) :设置颜色 drawRect (float left, float top, float right, float bottom, Paint paint) :绘制矩形 drawRoundRect(RectF rect, float rx, float ry, Paint paint) :绘制圆角矩形 drawText (String text, float x, float y, Paint paint) :绘制字符串 drawPoint (float x, float y, Paint paint) :绘制一个点 注意:画笔样式(Style)有三种STROKE、FILL和FILL_AND_STROKE,STROKE为空心,FILL为实心。

  14. 自定义绘图 Shader Android中提供了Shader类专门用来渲染图像以及一些几何图形,Shader本身是一个抽象类,它包括以下几个子类,分别是BitmapShader、ComposeShader、LinearGradient、RadialGradient和SweepGradient。 BitmapShader主要用来渲染图像,LinearGradient 用来进行线性渲染,RadialGradient 用来进行环形渲染,SweepGradient 用来进行梯度渲染,ComposeShader则是一个混合渲染,可以和其它几个子类组合起来使用。 Shader类的使用,都需要先创建一个Shader对象(通过子类的构造方法),然后通过Paint的setShader (Shader shader) 方法设置渲染对象,然后再绘制时使用这个Paint对象即可。

  15. 自定义绘图 Path和PathEffect Path用于规划路径,主要用于绘制复杂的几何图形。对于Android游戏开发或者说2D绘图中来讲Path 路径可以用强大这个词来形容。在Photoshop中我们可能还记得使用钢笔工具绘制路径的方法。 Path类常用方法如下:

  16. 自定义绘图 PathEffect是用来为路径添加效果,可以应用到任何Paint中从而影响线条绘制的方式,也可以改变一个形状的边角的外观并且控制轮廓的外表。Android包含了多种PathEffect,包括以下六个子类: CornerPathEffect :使用圆角来代替尖角,从而对图形尖锐的边角进行平滑处理 。 DashPathEffect :创建一个虚线的轮廓(短横线/小圆点) DiscretePathEffect:与DashPathEffect相似,但是添加了随机性,需要指定每一段的长度和与原始路径的偏离度。 PathDashPathEffect :定义一个新的路径,并将其用作原始路径的轮廓标记。 SumPathEffect:添加两种效果,将两种效果结合起来。 ComposePathEffect :在路径上先使用第一种效果,再在此基础上应用第二种效果。 注意:DashPathEffect只对Paint的Style设为STROKE 或STROKE_AND_FILL时有效。

More Related