【问题标题】:Detecting ACTION_UP / ACTION_DOWN when a ScrollView is swiped up/down向上/向下滑动 ScrollView 时检测 ACTION_UP / ACTION_DOWN
【发布时间】:2015-05-24 06:12:04
【问题描述】:

众所周知,当您滚动或滑动滚动视图时,您会收到一个 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

【问题讨论】:

  • 你扩展 ScrollView 吗?
  • 我确实扩展了它并覆盖了 onInterceptTouch,但如上所述,一旦滚动开始并且您抬起手指,就不会发出 ACTION_UP。

标签: android


【解决方案1】:

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

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);
    }
}

【讨论】:

  • 我想知道 ACTION_UP 而不是滚动。我需要知道手指何时离开屏幕。
猜你喜欢
  • 2015-02-02
  • 1970-01-01
  • 2020-01-17
  • 2018-05-06
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多