1、2015年1月第八章 图形图像处理及动画设计图形图像处理机动画设计WWW.TEDU.CN自定义View就是继承一个View的子孙类或View类,然后重写其中的一些方法,来完成界面美观效果。Android中,可以用自定义View的技术轻松地创建定制化的控件,创造自定义的控件步骤:最开始要建立一个基于View或其子孙类的子类。在XML文件中定义属性和参数,也可以在Java代码中调用方法来设置。在界面的XML布局文件中,使用标签将自定义的View加入到界面中。如果有必要的话,需要编写事件监听器和修改一些方法。一般地,都需要重写onMeasure()和onDraw()两个方法,它们关系到自定义View
2、中界面如何绘制。有必要的话,其他的以on开头的方法也需要重写。图形图像处理及动画设计 自定义自定义ViewonDraw()方法将会传送一个Canvas对象,通过它即可在2D图形上做任何事情,任何可以想到的东西都可以通过它呈现。onMeasure()方法较为复杂一些,因为这个方法是呈现组件和容器互动的关键部分,onMeasure()应该被重写,让它能够有效且准确的表现它所包含部分的测量值。一旦测量宽度和高度出来后,就要立即调用setMeasuredDimension()方法图形图像处理及动画设计 自定义自定义ViewCanvas就像手机中的画布,我可以在Canvas上绘制图形或者图片。View类
3、的onDraw()方法会传入一个Canvas对象,用来绘制组件界面的画布。在实现onDraw()方法时,经常会调用到save()和restore()方法。save()方法用来保存Canvas的状态,保存之后,可以调用Canvas中的位移、缩放、旋转和裁剪等操作;restore()方法可以恢复Canvas之前保存的状态,防止save()后对Canvas的操作会对后续绘制有所影响。save()和restore()要同时使用,如果restore()的调用次数比save()多,会发生错误图形图像处理及动画设计 图像处理图像处理Paint类拥有样式与颜色信息,主要是有关于如何绘制几何图形、文字及位图的方
4、法。voidsetARGB(inta,intr,intg,intb)设置Paint对象颜色,参数一为alpha透明通道。voidsetFakeBoldText(booleanfakeBoldText)是否设置伪粗体文本 voidsetLinearText(booleanlinearText)设置线性文本 voidsetTextSize(floattextSize)设置字体大小图形图像处理及动画设计 Paint(画笔)(画笔)Bitmap可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。可以使用下面的几种方法获取位图:通过BitmapFactory的各种静态方法根
5、据资源文件创建:根据图片创建:图形图像处理及动画设计 Bitmap(位图)(位图)Bitmapbmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.bmsrc);Bitmapbmp=BitmapFactory.decodeFile(/sdcard/dcoim/pets.jpeg)通过Drawable对象,步骤如下:使用BitmapDrawable(InputStreamis)构造一个BitmapDrawable;使用BitmapDrawable类的getBitmap()获取得到位图;BitmapDrawable也提供了显
6、示位图等操作。通过资源(Resources)需要先得到Resources对象,然后调用openRawResource()方法获取输入流,并将该流传给一个BitmapDrawable对象,然后调用Bitmap对象的getBitmap()方法得到位图图形图像处理及动画设计 Bitmap(位图)(位图)要获取位图信息,比如位图大小、是否包含透明度、颜色格式等,获取得到Bitmap 在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888和RGB_565四种。Bitmap还提供了compress()接口来压缩图片,不过Androi
7、dSAK只支持PNG、JPG格式的压缩。图形图像处理及动画设计 获取位图信息获取位图信息显示位图需要使用核心类Canvas,可以直接通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。Android提供了两种位图缩放的方法:drawBitmap(Bitmapbitmap,Rectsrc,Rectdst,Paintpaint)将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样。createBitmap(Bitmapsource,intx,inty,intwidth,intheight,Matri
8、xm,booleanfilter)在原有位图的基础上,缩放原位图,创建一个新的位图。图形图像处理及动画设计 缩放和旋转位图缩放和旋转位图通过Matrix,可以控制Android绘图坐标的位移、旋转、缩放等功能。Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set、post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。图形图像处理及动画设计 Matrix(矩阵)(矩阵)Android动画WWW.TEDU.CNViewAnimator的作用是为Fram
9、eLayout里面的View切换提供动画效果。ViewAnimator类有几个和动画相关的方法:setInAnimation(AnimationinAnimation):设定View进入屏幕时候使用的动画。setOutAnimation(AnimationoutAnimation):设定View退出屏幕时候使用的动画。一般使用AnimationUtils.loadAnimation(getApplicationContext(),android.R.anim.slide_in_left)来获得对应的动画效果。showNext():调用此方法显示Layout里面的下一个View。showPrev
10、ious():调用此方法显示Layout里面的上一个View。图形图像处理及动画设计 Android动画开发入门动画开发入门补间动画作用于View对象,主要包括对View对象的位置、尺寸、旋转角度和透明的变换。补间动画涉及的类包括Animation的几个子类如:AlphaAnimation TranslateAnimation ScaleAnimation RotateAnimation图形图像处理及动画设计 补间动画补间动画TweenAnimation逐帧动画主要用到的类是AnimationDrawable,通过它的addFrame(Drawableframe,intduration)方法,
11、将Drawable对象放到这个AnimationDrawable中,并设定跳转时间,然后将AnimationDrawable对象设置成ImageView的背景(使用ImageView的setBackgroundDrawable()方法),最后,调用start()方法启动它,注意不能在onCreate()方法中调用它。如果想让其循环播放,可以调用setOneShot(false)图形图像处理及动画设计 逐帧动画逐帧动画FrameAnimation可以使用程序控制补间动画的绘制,也可以使用配置文件来做设置,它主要有下面这些设置:XML标记和属性 透明度 尺寸变化 位置变换 旋转图形图像处理及动画设计 补间动画补间动画TweenAnimationThanks!关注达内科技官方微信 获取最新资讯WWW.TEDU.CN