自定义View -- 刻度尺

【图片】

这次在自定义View时主要通过以下几个步骤:

1.准备阶段(在构造方法处)

  初始化各种默认的Paint,图片资源。( 其中NinePatch资源需要通过Bitmap生成,绘制时调用ninePatch.draw )

2.确立区域

  在onMeasure方法中,通过setMeasuredDimension方法设置测量的宽与高。主要注意MeasureSpec.AT_MOST的情况

3.获取View的尺寸

  在onSizeChanged,获取View的宽高从而初始化各种尺寸。确定onDraw方法中要画的各部分的位置。要注意padding值

4.进行绘制

  这里主要调用Canvas的draw方法。

5.实现滑动事件

  核心是确立中值(不是中间值,而且最靠近中间的值)。每次手指移动如果超过单位值,就会改变中间的值。而如果不超过,则记录在一个成员变量里,作为绘制时中间值的偏移量。通过不断的重绘而实现滑动效果

  设置有效的事件区域。当Down事件触摸的不是尺子的区域时直接返回false,将不会收到后续事件。

  在有效的事件区域内,解决滑动冲突,去判断是否有ViewParent,如果有就通过vp.requestDisallowInterceptTouchEvent去向父亲请求事件。

6.实现惯性滑动

  这样通过使用VelocityTracker来测量手离开时的速度,如果超过一定速度(ViewConfiguration中有),则调用Scoller的fling方法做好惯性滑动的准备,然后让View重绘,并在computeScroll中改变中值或者中值的便宜量并再次重绘就可。

 

未实现:各种扩展

posted @ 2016-07-27 00:23  林哲  阅读(334)  评论(0)    收藏  举报