【问题标题】:Why onTouchEvent getPointerCount() method always returning 1?为什么 onTouchEvent getPointerCount() 方法总是返回 1?
【发布时间】:2015-06-13 23:33:34
【问题描述】:

我只是想让这个功能正常工作,但我遇到了麻烦。当我触摸 View 时,getPointerCount() 方法总是返回 0 指针,当我用一根手指触摸屏幕时,当我用两根或更多手指触摸屏幕时,它总是返回 1。你有什么想法吗?

我正在尝试这段代码,

@Override
    public boolean onTouch(View view, MotionEvent me) {
        // No dragging during animation at the moment.
        // TODO: Stop animation on touch event and return to drag mode. 
        if (me.getPointerCount() >= 2) {
            mAnimate = false;
            mEnableTouchPressure = false;
            mRenderLeftPage = false;
            startCurl(CURL_NONE);
            mCurlState = CURL_NONE;
            mPageRight.setFlipTexture(false);
            mPageLeft.setFlipTexture(false);
            return false;
        } else {
            if (me.getAction() == MotionEvent.ACTION_DOWN) {
                Log.e("TAG_EVENT", me.getPointerCount() + "");
            } else {
                Log.e("TAG_EVENT - 2", me.getPointerCount() + "");
            }
        }
}

【问题讨论】:

    标签: android view touch-event


    【解决方案1】:

    您可以阅读关于MotionEvent.ACTION_MASK。为了捕捉多点触控的动作,您可以使用以下代码:

    int action = (motionEvent.getAction() & MotionEvent.ACTION_MASK) % 5
    switch(action) {
        case MotionEvent.ACTION_DOWN:
            System.out.println(motionEvent.getPointerCount());
            break;
    }
    

    【讨论】:

    • 不要认为是这种情况(无论如何在最新版本的 API 中)。 ACTION_DOWN 事件的指针计数始终为 1(即使您使用 ACTION_MASK 屏蔽了正确的位)
    【解决方案2】:

    我认为是因为您应该为要处理的触摸事件返回 true。

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
    • 对不起,我是新来的。我的意思是,问题可能与 onTouch 方法未返回 true 相关,因此未处理触摸事件。来自文档(View.onTouch()):返回 如果侦听器已经消费了事件则为真,否则为假。所以你可以尝试在 else 语句中返回真.
    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2020-08-19
    • 2016-10-19
    相关资源
    最近更新 更多