gpt4 book ai didi

android - onInterceptTouchEvent 指针计数不正确

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:06 27 4
gpt4 key购买 nike

我希望我的 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),当您从多点触控中举起第一根手指时抛出应用程序终止异常: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 指针计数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812247/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com