繁体   English   中英

Android ListView onTouchEvent并不总是提供ACTION_DOWN

[英]Android ListView onTouchEvent doesn't always give ACTION_DOWN

我的问题是,当我尝试在ListView中拖动一个项目时,我并不总是得到ACTION_DOWN事件。 我有很多ACTION_MOVE事件,只有一个ACTION_UP事件。 情况并非总是如此。 我有3次ACTION_DOWN。 它困惑了我。

我看了类似的问题,但它的答案似乎不适合我的。 谁能想到为什么会这样?

谢谢

//list_client  --  a listview
list_client.setOnTouchListener(new View.OnTouchListener() {
    float f1 = -1, f2 = -1 ;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN: 
                f1 = event.getRawY();
                    break;
            case MotionEvent.ACTION_MOVE:
                f2 = event.getRawY();
                if(f2 - f1 > 50){
                    if(View.VISIBLE != rl_search_and_add.getVisbility() &&  ){  rl_search_and_add.setVisibility(View.VISIBLE);
                }
                f1 = f2;
                }else if (f2 - f1 < -50){
                    rl_search_and_add.setVisibility(View.GONE);
                    f1 = f2;
                }
                break; 
            case MotionEvent.ACTION_UP:
                f1 = -1; f2 = -1;
                break; 
        }
        return false;
    }
});

这种行为可能有几个原因。

  • 用户可能错过了一些列表并且MotionEvent.ACTION_DOWN已由其他组件处理,但是用户如何继续拖动并点击列表视图区域,则会收到MotionEvent.ACTION_MOVE操作。
  • 另一种可能性是,你必须参加许多活动,并且他们被转移到历史事件,你只收到了最新的活动。 您可以使用MotionEvent的所有历史方法来查看它们。

你应该覆盖onInterceptTouchEvent,如下所示:

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            yDown = event.getRawY();
            break;
        default:
            break;
    }
    return super.onInterceptTouchEvent(event);
}

然后使用yDown到你的程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM