一、综述
scrollview不能够单独使用,需要配合子布局,比如vertical的linearlayout。同时注意,scrollview里面不要放置listview,因为会在竖直滑动 动作上造成冲突。同时,TextView有自己的滑动,不需要scrollview。再者,ScrollView只支持竖直方向的滑动,如果是水平方向,需要使用HorizontalScrollView
继承自:
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.FrameLayout
↳ android.widget.ScrollView
二、常用方法
1、dispatchKeyEvent(KeyEvent event)
把一个key event分配给在focus path上的下一个view。这条路从视图树的顶端到当前视图。如果这个视图已经focus,会分给自己。要不然会分配给下一个节点。这个方法也能够开启任何key listener。
参数:event 待分配的key事件
返回:如果已经handle则返回true,相反返回flase
2、draw(Canvas canvas)
手动着色(绘制)指定Canvas的view。该函数调用前,该view必须已经全局布局。当加载一个view的时候,实施onDraw类而不是复写。
参数:canvas 需要着色的view
3、public void fling(int velocityY)(急行的意思)
参数:在Y方向上的初始速度。正数表示是向屏幕下方滑动,即到达scrolll的顶部。
4、onGenericMotionEvent(MotionEvent event)
实现该方法用于处理一般动作事件。Generic motion events 描述 joystick movements, mouse hovers, track pad touches, scroll wheel movements and other input events.
参看源码:
public boolean onGenericMotionEvent(MotionEvent event) {
if (event.isFromSource(InputDevice.SOURCE_CLASS_JOYSTICK)) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// process the joystick movement...
return true;
}
}
if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
switch (event.getAction()) {
case MotionEvent.ACTION_HOVER_MOVE:
// process the mouse hover movement...
return true;
case MotionEvent.ACTION_SCROLL:
// process the scroll wheel movement...
return true;
}
}
return super.onGenericMotionEvent(event);
}
参数:event 处理的事件
返回:如果处理了则返回true,否则返回false
5、onInterceptTouchEvent(MotionEvent ev)
用于拦截所有的触摸屏幕的动作事件。允许监听子view的事件,并且接管过来。
注意其与onTouchEvent()方法的
1)接收到down事件
2)子view处理或者返回给你当前的onTouchEvent()方法处理。意味着你应该使onTouch()事件返回true,这样才能够继续查看接下来的gesture,而不是找父view处理。同时,如果你返回了true,在onInterceptTouchEvent(MotionEvent ev)方法里面就接收不到了。
3)如果该方法返回false,event会先发送到这里,然后再给目标的onTouchEvent()方法
4)如果这里返回true,就不会接收到event了
参数:ev 分发的事件
返回:见3),4)
6、public boolean onTouchEvent(MotionEvent ev)
处理click事件
返回:true则是可以处理,否则不能
7、pageScroll(int direction)
处理page up/down事件,就是快速地翻页,并且focus到新区域的最高或最底
参数:FOCUS_UP或者FOCUS_DOWN
返回:如果使用就返回true,否则flase
8、requestChildFocus(View child, View focused)
当子视图请求焦点时
参数:child :子视图 foucus:当前有焦点的视图
9、requestLayout()
无效视图已经有所改变的时候调用。(还是不太懂)
10、onMeasure(int widthMeasureSpec, int heightMeasureSpec)
根据view和内容决定宽度和高度。复写该方法时,需要调用setMeasuredDimension(int,int)来保存测量好的宽度和高度。同时需要确定view的最小的高度和宽度getSuggestedMinimumHeight()和getSuggestedMinimunWidth()。
参数:width.. 父view规定的横向空间
height...父view规定的纵向空间
11、onSaveInstanceState()
保存重现当前实例的最基本的要素。
返回:返回一个 parcelable 的对象
12、public void scrollTo (int x, int y)
滑动到~~~~