自定义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中改变中值或者中值的便宜量并再次重绘就可。
未实现:各种扩展