Android开发实践:自定义带动画的观点

  

,,前面两篇文章介绍了自定义视图的onMeasure和onLayout原理,本文准备介绍自定义视图的第三个关键部分,即onDraw()函数的重载。


,,对于一个自定义观点来说,onMeasure只是用来计算角度尺寸,onDraw()才是真正执行视图的绘制,所以一般我们都需要重写onDraw()函数来绘制我们期望的UI界面。下面我以一个具体的例子探索自定义视图的onDraw()的实现过程和关键点。


,,我们的目标是制作一个柱状图动画,视图的动画启动后,会显示一排柱状图增长的画面,这种动画多用于财务类或者统计类的应用程序中,效果如图所示():


,,, Android开发实践:自定义带动画的视图”> </p> <p> <br/> </p> <p>,<强> 1。首先,自定义视图的派生类</强> </p> <p> <强> <br/> </强> </p> <pre类= public  class  AnimatorView  extends  View  {      ,,,private  Paint  mPaint;,,,   ,,,,   ,,,public  AnimatorView (Context 上下文),{   ,,,,,,,超级(上下文),,   ,,,,,,,初始化();   ,,,}      ,,,public  AnimatorView (Context 上下文,AttributeSet  attrs), {   ,,,,,,,超级(上下文,attrs);   ,,,,,,,初始化();   ,,,}   ,,,,   ,,,public  AnimatorView (Context 上下文,AttributeSet  attrs,, int  defStyle), {   ,,,,,,,超级(上下文,attrs, defStyle);   ,,,,,,,初始化();   ,,,}   ,,,,   ,,,protected  void 初始化(),{   ,,,,,,,mPaint =, new 油漆(),,   ,,,,,,,mPaint.setAntiAlias(真正的);   ,,,,,,,mPaint.setStyle (Style.FILL);,,,,,,,,,,,,,,   ,,,},,,   }

,,注:涂料是用来绘图的画笔,可以设置其样式,画面的粗细,填充模式,颜色等等。


,,<强> 2。定义待绘制的图形数据


,,待绘制的图形数据一般是在程序中动态给出的,这里为了演示,直接定义好:


public  class  AnimatorView  extends  View  {      ,,,private  static  final  int  RECT_WIDTH =, 60岁,,,,,//每个矩形块的宽度   ,,,private  static  final  int  RECT_DISTANCE =, 40,,//矩形块之间的间距   ,,,private  static  final  int  TOTAL_PAINT_TIMES =, 100,,//控制绘制速度,分100次完成绘制,,,,      ,,,//待绘制的矩形块矩阵,左为高度,右为颜色   ,,,private  static  final  int [] [], RECT_ARRAY =, {,   ,,,,,,,{380 Color.GRAY},   ,,,,,,,{600 Color.YELLOW},   ,,,,,,,{200 Color.GREEN},   ,,,,,,,{450 Color.RED},   ,,,,,,,{300 Color.BLUE}   ,,,},,   ,,,,   ,,,private  int  mPaintTimes =, 0;,,//当前已经绘制的次数      }


,,<强> 3。重载onDraw()函数,实现绘制

<强>

public  class  AnimatorView  extends  View  {      ,,@Override   ,,,protected  void  onDraw (Canvas 画布),{      ,,,,,,,mPaintTimes + +;   ,,,,,,,   ,,,,,,,,(,int  i=0, iAndroid开发实践:自定义带动画的观点