向上/向下滑动ScrollView时检测ACTION_UP / ACTION_DOWN

时间:2015-05-24 06:12:04

标签: android

众所周知,当您滚动或滑动滚动视图时,您将收到ACTION_CANCEL事件。我需要知道ACTION_UP和ACTION_DOWN事件何时发生,但如果你连续向上和向下滑动,ACTION_CANCEL将阻止发出ACTION_UP / ACTION_DOWN。我尝试实现onInterceptTouchEvent,甚至使用了getActionMasked,但两种解决方案都没有工作。

当用户在滑动期间松开手指时,我的滚动视图何时生成了ACTION_UP?

更新:

我显然对Android处理动作和触摸事件的方式做了一些假设。我发现以下视频很有帮助,可以很好地概述Android的触控系统,它甚至涵盖了我正在做的事情:

https://www.youtube.com/watch?v=EZAoJU-nUyI

1 个答案:

答案 0 :(得分:0)

这可能不是最好的方法,但如果可以请尝试这样的事情......

public class CustomScrollView extends ScrollView {

public CustomScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

Timer ntimer = new Timer();
MotionEvent event;

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) 
{
    checkAgain();
    super.onScrollChanged(l, t, oldl, oldt);
}

public void checkAgain(){
    try{
        ntimer.cancel();
        ntimer.purge();
    }
    catch(Exception e){}
    ntimer = new Timer();
    ntimer.schedule(new TimerTask() {

        @Override
        public void run() {

            if(event.getAction() == MotionEvent.ACTION_UP){
                // ScrollView Stopped Scrolling and Finger is not on the ScrollView
            }
            else{
                // ScrollView Stopped Scrolling But Finger is still on the ScrollView
                checkAgain();
            }
        }
    },100);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
    this.event = event; 
    return super.onTouchEvent(event);
    }
}