继承已有ViewGroup实现自定义控件实现步骤:
1.写一个类如MyScrollView继承ViewGroup。实现带两个参数的构造方法。
2.实现父类中未实现的方法onLayout(boolean changed, int l, int t, int r, int b)。
其中,changed:当该view位置发生变化时为true。
l/t/r/b:是指当前viewgroup在其父view中的位置。
用getChildCount()方法可以获得该viewgroup包含的子孩子数。
遍历循环中再用getChildAt(index);根据索引获得子孩子对象view。
再用view.layout(i*getWidth(), 0, (i+1)*getWidth(), getHeight());设置子孩子view在viewgroup坐标系中的位置。
3.对touch事件进行解析,可以自己解析,也可以使用 GestureDetator 进行解析。
4.scrollBy(x, y):将view的内容移动一定的距离,x, y是一个距离值,表示多少个像素。x为正时,视图向左移。
scrollTo(x, y):将view的内容移动到某个点上,x, y是一个具体的坐标值。
5.Scroller的使用:Scroller是一个工程师,专用于位移、速度等数据变化的计算。
scroller.startScroll(startX, startY,disX,disY,duration);方法是开始进行新的位移。
scroller.computeScrollOffset();方法是计算当前的位移情况。如果返回false,则位移结束。
调用invalidate();方法时,也会执行computeScroll()方法的,可以在该方法中判断位移是否结束。
Touch事件的传递
touch 事件的传递机制。主要就是ViewGroup中的几个方法:
dispatchTouchEvent()
//分发事件,最早执行
onInterceptTouchEvent()
//是否中断事件的传递,返回true 中断。默认返回false
onTouchEvent()
//处理事件、返回true,消费事件。
本文详细介绍了如何通过继承ViewGroup来创建自定义控件MyScrollView,包括构造方法的实现、onLayout方法的具体操作流程,以及触摸事件处理和Scroller的使用方法。
1057

被折叠的 条评论
为什么被折叠?



