• 1. 第18章 Android图形图像
  • 2. 内容概要 Android访问图片 Android动画-Frame动画,Tween动画 Android动态图像绘制
  • 3. Android图形处理概述 Android处理图形的能力非常强大,对于2D图形的处理不使用Java API处理,Android系统定义了一系列处理2D图形的处理类,这些类分别位于android.graphics,android.graphics.drawbable.shapes和android.view.animation 包中。对于3D图形的处理Android使用OPenGL ES,这些类位于javax.microedition.khronos.opengles 和android.opengl包中。
  • 4. Android图形处理概述 Android系统中图形大体上分两类,一是静态图形的处理,也就是不经常变化的图片,如icon、logo、动画等。对于这种类型的图片通过各种Drawable类来处理,这种方式一般是将图片放在res/drawable目录或者res/animation目录中。对于动态图片(大小、位置格式经常变化的图片),一般采用不断的重新绘制绘制的方式来处理,例如游戏中场景、角色和道具等。
  • 5. Android访问图片 Android在访问图片时,使用Drawable类及其子类BitmapDrawable、ColorDrawable、ShapeDrawable等类处理,关于Drawable类的初始化有三种方式,一是使用在工程中保存的图片;二是使用mxl定义Drawable属性;三是使用构造器来完成,但这种方法不经常被采纳。
  • 6. Android访问图片使用图片创建Drawable对象,在资源文件中保存一图片文件test.jpg,然后通过R.drawable.test使用该图片. ImageView imgv = (ImageView)findViewById(R.id.imgv); imgv.setImageResource(R.drawable.test); 也可以使用xml文件定义Drawable对象 例如:在AndroidManifest.xml文件中定义应用的图标:
  • 7. Android访问图片在布局文件中定义一个ImageView时指定Drawable对象
  • 8. Android访问图片如果图片是保存在SD卡中,就需要Bitmap和BitmapFactory两个类来读取SD卡中的文件. public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String path = "/sdcard/bg.png"; Bitmap bm = BitmapFactory.decodeFile(path); ImageView iv = new ImageView(this); iv.setImageBitmap(bm); this.setContentView(iv); } }
  • 9. Android访问图片-示例
  • 10. Android动画 Android平台提供了两种动画,一种是Tween动画,即通过对场景里的对象不断进行图像变换(平移,缩放,旋转) 来产生动画效果;第二种就是 Frame 动画,即顺序播放事先做好的图像,和电影类似。 首先来分析 Tween动画,Tween动画通过对View 的内容完成一系列的的图形变换(包括平移、缩放、旋转、改变透明度)来实现动画效果。它主要包括以下四种动画效果:
  • 11. Android动画-tween动画 Alpha: 渐变透明度动画效果。 Scale: 渐变尺寸伸缩动画效果。 Translate: 画面转移位置移动动画效果。 Rotate: 画面转移旋转动画效果。 Tween动画是通过预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间。程序沿着时间线执行这些指令就可以实现动画效果。因此我们首先需要定义Animation动画对象,然后设置该动画的一些属性,最后通过startAnimation 方法来开始动画。网上的大多数例子都是以 xml文件的形式配置的 我们这里用代码实现一下。下面介绍各个动画的属性:
  • 12. Android动画-tween动画 AlphaAnimation(float fromAlpha, float toAlpha) 功能:构建一个渐变透明度动画 参数: fromAlpha 为动画起始透明度;toAlpha为动画结束透明度(0.0表示完全透明,1.0表示完全不透明)。 ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 功能:构建一个渐变尺寸伸缩动画。 参数:fromX、toX 分别是起始和结束时X坐标上的伸缩尺寸。fromY、toY分别是起始和结束时 Y坐标上的伸缩尺寸。pivotXValue、pivotYValue 分别为动画相对于物件的X、Y坐标的开始位置 pivotYType pivotXType 分别为x、y的伸缩模式。
  • 13. Android动画-tween动画 TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) 功能:构建一个画面转换位置移动动画。 参数:fromXDelta、fromXDelta分别为起始坐标; toXDelta、toYDelta分别为结束坐标。 RotateAnimation(float fromDegress, float toDegress, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 功能:构建一个旋转动画。 参数:fromDegress 为开始的角度; toDegress 为结束的角度。 pivotXType、pivotYType分别为x、y 的伸缩模式。pivotXValue、pivotYValue 分别为伸缩动画相对于x、y的坐标的开始位置。
  • 14. Android动画-tween动画 setDuration(long durationMillis) 功能:设置动画显示的时间 以毫秒为单位。 startAnimation(Animation animation) 功能:开始播放动画 参数:animation为要播放的动画。
  • 15. tween动画示例
  • 16. Android动画-Frame动画 Frame动画是顺序播放图片来产生的一种动画效果类似于电影。例如要实现一个人走路的动画效果,可以通过3张图片实现:第一张是两脚着地;第二张是左脚着地;第三张是右脚着地。这样顺序播放就形成了人走路的动画了。Frame动画是通过AnimationDrawable类实现的。该类中有两个重要的方法是start()和stop(),分别用来开始和停止动画。动画一般是通过xml配置文件来进行配置的。在res/anim目录中定义xml文件,该文件的根元素是,子元素是,子元素可以有多个。
  • 17. Android动画-Frame动画 frame_anim.xml文件内容如下:
  • 18. Android动画-Frame动画 Frame动画示例如下:
  • 19. Android动画-Frame动画main.xml
  • 20. Android动画-Frame动画
  • 21. Android动态图像绘制 动态图形绘制的基本思路是,创建一个View类或者SurfaceView类,重写onDraw()方法,使用Canvas对象在界面上绘制不同图形,使用invalidate()方法刷新界面。动态绘制图形的常见类有Canvas、Paint、Color、Path等。 1、Canvas类:Canvas类是画布,提供了各种图形的绘制方法,如矩形、圆、椭圆、点、线、文字等。具体方法见下表
  • 22. Android动态图像绘制方法名称方法描述drawText(String text,float x,float y,Paint paint)画文本drawPoint(float x,float y,Paint paint)画点drawLine(float startX,float startY,float soptX,float stopY,Paint paint)画线drawCircle(float cx,float cy,flaot radius,Paint paint)画圆drawOval(rectF oval,paint paint)画椭圆drawRect(rectF rect,paint paint)画矩形drawRoundRect(rectF rect,float rx,float ry,paint paint)圆角矩形clipRect(float left,float top,float right,float bottom)裁剪矩形clipRegion(Region region)裁剪区域
  • 23. Android动态图像绘制2、Paint类:Paint类是画笔,用来描述图形的颜色和风格,如线宽、颜色、字体等信息。Paint类常用方法如下:方法名称方法描述Paint()构造方法setColor(int color)设置颜色setStrokeWidth(float width)设置线宽setTextAlign(Paint.Align align)设置文字对齐setTextSize(float textSize)设置文字尺寸setShader(Shader shader)设置渐变setAlpha(int a)设置alpha值reset()复位Paint默认设置
  • 24. Android动态图像绘制3、Color类:Color类中定义了一些颜色常量和创建颜色的方法,颜色定义使用RGB定义,如下表:颜色属性名称描述BLACK黑色BLUE蓝色CYAN青色DKGRAY深灰色GRAY灰色GREEN绿色LIGRAY浅灰色MAGENTA紫色RED红色TRANSSARENT透明WHITE白色YELLOW黄色
  • 25. Android动态图像绘制4、Path类:一般用来从某个点移动到另一个点连线,例如画梯形需要有点和连线,常使用的方法如下:方法名称方法描述lineTo(float x,float y)从最后点到指定点画线moveTo(float x,float y)移动到某一点reset()复位5、Shader类及其子类: 用来渲染图像使用的类,子类有BitmapShader、ComposeShader、LinearGradient、 RadialGradient、SweepGradient。
  • 26. Android动态图像绘制动态图像示例如下:
  • 27. Thanks!