即使我为它返回true,也没有调用MotionEvent.ACTION_DOWN

时间:2015-05-13 01:12:59

标签: android ontouchlistener motionevent

onTouchListener LinearLayout ListView我有一个ACTION_DOWN,我正在尝试使用ACTION_UPListView数据来检测用户何时拥有滑到下一个MotionEvent。但是,ACTION_DOWN永远不会等于ACTION_UP,尽管onTouchListener完美无缺。经过大量的谷歌搜索,我能找到的唯一解决方案是在调用事件时返回true,但我已经这样做了。这是我的View.OnTouchListener mTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { downX = event.getX(); return true; } else if (event.getAction() == MotionEvent.ACTION_UP) { upX = event.getX(); if(userSwipedFarEnough) doStuff() return true; } return false; } }; 代码

Uncaught TypeError: Cannot read property 'style' of null

3 个答案:

答案 0 :(得分:3)

我弄清楚发生了什么,我的listview的scrollview以某种方式窃取了action_down,因此它没有被调用。当我有一个空的列表视图和滚动工作时,我意识到了。

答案 1 :(得分:0)

根据触摸类型ACTION_DOWN ACTION_UP ACTION_MOVE多次调用onTouch,所有这些都可以一起发生。我会说取出其他如果只是使用if if它捕获两个动作

答案 2 :(得分:0)

我的解决方案是扩展ScrollView:

interface MyScrollViewActionDownListener{
    fun onActionDown()
}

class MyScrollView: ScrollView
{
    private var mActionDownListener: MyScrollViewActionDownListener? = null
    constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int): super(context, attributeSet, defStyleAttr)
    constructor(context: Context):super(context)
    constructor(context: Context, attributeSet: AttributeSet):super(context,attributeSet)

    override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        if(ev!!.action == MotionEvent.ACTION_DOWN){
            mActionDownListener?.onActionDown()
        }
        return super.onInterceptTouchEvent(ev)
    }

    fun setActionDownListener(listener: MyScrollViewActionDownListener){
        this.mActionDownListener = listener
    }
}