零点起飞学Android开发之Android中图形图像的处理.pptx
第10章Android中图形图像的处理图形图像的应用在一个系统中占有比较大的分量,如一些程序的图标、界面的美化等等,都离不开图形图像。Android中对图形图像的处理非常强大,对于2D图像它并没有沿用Java中的图形处理类,而是使用了自定义的处理类。本章将讲解Bitmap位图的使用、动画的创建和Canvas、Paint的基本绘图。10.1 Android中图形图像资源的获取在之前的应用程序中,我们使用的几乎都是存储在drawable文件夹中的图片资源。本节我们将介绍一种新的提供图片的路径,从assets文件夹中获取图片资源。比如我们如果想要将SD卡中的图片作为手机墙纸,就需要使用Bitmap和BitmapFactory类。10.1.1Bitmap和BitmapFactory类Bitmap代表一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象。如果需要获取BitmapDrawable所包装的Bitmap对象,需要调用BitmapDrawable.getBitmap()方法。语法如下所示:Bitmap bitmap=bDrawable.getBitmap();10.1.1Bitmap和BitmapFactory类方法名称方法名称方法方法说明明public static BitmapcreateBitmap(Bitmap src)返回一个Bitmap位图public final boolean isRecycled()判断该Bitmap对象是否被回收public void recycle()强制回收该Bitmap对象方法名称方法名称方法方法说明明public static BitmapdecodeByteArray(byte data,int offset,int length)从指定字节数组的offset位置开始,解析长度为length的字节数据为Bitmap对象public static BitmapdecodeFile(String pathName)从pathName指定的文件中解析创建Bitmap对象public static BitmapdecodeResource(Resources res,int id)根据ID指定的资源解析创建Bitmap对象public static BitmapdecodeStream(InputStream is)根从指定的输入流中解析创建Bitmap对象10.1.2获取assets文件夹图片资源assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。方法名称方法名称方法方法说明明public void close()关闭AssetManagerpublic final InputStreamopen(String fileName)打开指定资源对应的输入流public final Stringlist(String path)返回指定路径下的所有文件10.2 Android中的动画生成Android系统提供了两种创建动画方式:补间动画(Tween Animation)和帧动画(Frame Animation)。补间动画(Tween Animation)主要实现对图片进行移动、方法、缩小以及透明度变化的功能,而帧动画(Frame Animation)则比较简单,就是将一张张的图片连续播放以产生动画效果。下面分别介绍两种动画技术的开发及应用。10.2.1 补间动画补间动画(Tween Animation)就是对场景里的对象不断的进行图像变化来产生动画效果,可以对对象进行旋转、平移、放缩和渐变等操作。标记名称名称属性属性值说明明shareInterpolator:是否在子元素中共享插入器可以包含其他动画变换的容器,同时也可以包含标记fromAlpha:变换的起始透明度toAlpha:变换的终止透明度,取值为0.01.0实现透明度变换效果fromXScale:起始的X方向上的尺寸toXScale:终止的X方向上的尺寸fromYScale:起始的Y方向上的尺寸toYScale:终止的Y方向上的尺寸;其中1.0代表原始大小pivotX:进行尺寸变换的中心X坐标pivotY:进行尺寸变换的中心Y坐标实现尺寸变换效果,可以指定一个变换中心,例如指定pivotX和pivotY为(0,0),则尺寸的拉伸或收缩均从左上角的位置开始fromXDelta:起始X位置toXDelta:终止Y位置fromYDelta:起始Y位置toYDelta:终止Y位置实现水平或竖直方向上的移动效果。如果属性值以“%”结尾,代表相对于自身的比例;如果以“%p”结尾,代表相对于父控件的比例;如果不以任何后缀结尾,代表绝对的值fromDegree:开始旋转位置toDegree:结束旋转位置;以角度为单位pivotX:旋转中心点的X坐标pivotY:旋转中心点的Y坐标实现旋转效果,可以指定旋转定位点10.2.2 帧动画帧动画(Frame Animation)就如同电影一样,通过顺序播放一系列事先加载好的静态图片产生动画效果。帧动画的XML文件中主要是用到的标签及其属性。标签名称名称属性属性值说明明android:oneshot:如果设置为true,则该动画只播放一次,然后停止在最后一帧Frame Animation的根标记,包含若干标记android:drawable:图片帧的引用;android:duration:图片帧的停留时间;android:visible:图片帧是否可见每个标记定义了一个图片帧,其中包含图片资源的引用等属性10.3 Android中图形的绘制在Android系统中,图形绘制功能也是很强大的,在程序开发中有一些控件需要自己去绘制,这时我们可以利用Android中的相应类去完成。特别是在游戏开发、界面设计中,很多图形的绘制都需要用户使用Canvas(画布)类和Paint(画笔)类去进行绘图程序的开发。10.3.1 图形绘制类介绍在绘制一些图形时,需要用到Android中的一些类,如Canvas类、Paint类等,它们在图形绘制过程中起到了至关重要的作用。下面我们就来介绍这几个类的使用方法。Canvas类主要实现了屏幕的绘制过程,其中包含很多实用的方法,如绘制一条路径、区域、贴图、画点、画线、渲染文本等。10.3.1 图形绘制类介绍方法名称方法名称方法方法说明明public boolean clipRect(float left,float top,float right,float bottom)剪切一个矩形区域public boolean clipRegion(Region region)剪切指定区域public void drawArc(RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)画弧public void drawCircle(float cx,float cy,float radius,Paint paint)绘制圆形public void drawLine(float startX,float startY,float stopX,float stopY,Paint paint)绘制直线public void drawOval(RectF oval,Paint paint)绘制椭圆public void drawRect(RectF rect,Paint paint)绘制矩形public void drawRoundRect(RectF rect,float rx,float ry,Paint paint)绘制圆角矩形10.3.2 基本图形的绘制学习了上面的相关API,下面我们来实现在Canvas上绘制图形。10.4 小结本章内容主要讲解了Android系统中图形的应用。其中,访问assets文件夹中的图片资源,是本章难点,需要读者多多练习,以便熟练掌握。动画和Canvas绘图在游戏开发中比较常用,我们可以根据程序需要,引用或绘制各种各样的图形,丰富界面的多样性。