监听停止滑动
本以为ScrollView和ListView一样有setOnScrollListener方法。想不到ScrollView竟然没有。那就只能通过手势触摸事件来判断了。当手离开屏幕时,开始往handler中不断发生消息,直至滑动停止。
判动是否滑到底部
在滑动停止的时候,通过ScrollView和Linearlayout(scrollview的子控件)的高度以及滑动的距离来判断。
PS:我的scrollview是横向的,所以使用的是x坐标和width。
scrollView.setOnTouchListener(new OnTouchListener() {
private int lastY = 0;
private int touchEventId = 0x1234;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
View scroller = (View) msg.obj;
if (msg.what == touchEventId) {
if (lastY == scroller.getScrollX()) {
scrollerStop(scroller);
} else {
handler.sendMessageDelayed(handler.obtainMessage(
touchEventId, scroller), 5);
lastY = scroller.getScrollX();
}
}
}
};
@Override
public boolean onTouch(View v, MotionEvent event) {
int eventAction = event.getAction();
int y = (int) event.getRawX();
lastY = 0;
switch (eventAction) {
case MotionEvent.ACTION_UP:
if (lastY != y) {
handler.sendMessageDelayed(
handler.obtainMessage(touchEventId, v), 10);
}
break;
default:
break;
}
return false;
}
/**滑动停止后的响应 */
private void scrollStop(Object view) {
if(cityLinLayout.getMeasuredWidth() <= (scrollView.getWidth() + scrollView.getScrollX()+5)){
/***
*滑动到底部的操作
*/
}
if(scrollView.getScrollX() < 0){
/***
*滑动到顶部的操作
*/
}
}
});
}