Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 错误的指针计数onInterceptTouchEvent大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望我的ViewPager只在单指时滑动.所以我扩展了类并实现了onInterceptTouchEvent,如下所示:

@Override
public Boolean onInterceptTouchEvent(MotionEvent ev)
{
    if(ev.getPointerCount() > 1)
    {
        return false;
    }
    return true;
}

但是无论屏幕上有多少点,getPointerCount()总是返回’1′.当我覆盖onTouchEvent时,我得到了正确的数字,但是当我这样做时,一个错误阻止了寻呼机完全工作(http://code.google.com/p/android/issues/detail?id=18990),当你从多点触控中抬起你的第一根手指时抛出一个app杀死异常:java.lang.IllegalArgumentexception :pointerIndex超出范围

我还能怎么做呢?

编辑:

指针计数问题仍然存在,但我能够解决在onTouchEvent中抛出的异常.

当我得到例外时,我正在这样做:

if(ev.getPointerCount() == 1)
{
    return super.onTouchEvent(ev);
}
return false;

问题在于,当您将第一根手指从多点触控中抬起时,ViewPager的onTouchEvent最终会处理ACTION_UP事件,而不会先处理ACTION_DOWN.所以我提出了这个修复程序,它可以避免异常并在你放下第二根手指时结束ViewPager的移动:

private Boolean moving = false;
@Override
public Boolean onTouchEvent (MotionEvent ev)
{
    int action = ev.getAction();
    if(action == MotionEvent.ACTION_DOWN)
    {
        moving = true;
    }
    if(ev.getPointerCount() == 1)
    {
        if(moving)
        {
            return super.onTouchEvent(ev);
        }

        if(action == MotionEvent.ACTION_Up)
        {
            moving = false;
        }
    }
    else if(ev.getPointerCount() > 1 && moving)
    {
        ev.setAction(MotionEvent.ACTION_Up);
        moving = false;
        return super.onTouchEvent(ev);
    }
    return false;
}

解决方法

你的onTouchEvent不适合我.我会调查原因.但同时做了一个解决方法.我挖掘了ViewPager代码,发现你可以这样做:

@Override
public Boolean onInterceptTouchEvent(MotionEvent ev) {

    if (ev.getPointerCount() > 1){
        ev.setAction(MotionEvent.ACTION_CANCEL);
    }

    return super.onInterceptTouchEvent(ev);

}

getPointerCount()对我来说没问题.使用上面的代码,ViewPager也会处理ACTION_DOWN步骤,并且它中的错误永远不会发生.

大佬总结

以上是大佬教程为你收集整理的android – 错误的指针计数onInterceptTouchEvent全部内容,希望文章能够帮你解决android – 错误的指针计数onInterceptTouchEvent所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。