gpt4 book ai didi

android - 奇怪的跳跃在 Android MotionEvent 触摸位置

转载 作者:行者123 更新时间:2023-11-30 03:58:46 26 4
gpt4 key购买 nike

我在 Android 上使用类似于以下的代码实现了一个简单的可滚动画廊类型 View :

private int mPos; // The current scroll position.
private int mLastMostionPos; // Previous touch position.

@Override
public boolean onTouchEvent(MotionEvent ev)
{
final int action = ev.getAction();

Log.d(TAG, "Mouse mLastMotionPos: " + mLastMotionPos + " ev.getX(): " + ev.getX() + " mPos: " + mPos + " ev.getPointerId(0): " + ev.getPointerId(0)
+ " ev.getEventTime(): " + ev.getEventTime());

switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
// Remember where the motion event started
mLastMotionPos = (int)ev.getX();
break;
case MotionEvent.ACTION_MOVE:
final int pos = (int)ev.getX(activePointerIndex);
// Scroll to follow the motion event
int delta = mLastMotionPos - pos;
mLastMotionPos = pos;

mPos += delta;
if (mPos < mMinPos)
mPos = mMinPos;
if (mPos > mMaxPos)
mPos = mMaxPos;
break;

它确实有效,但我注意到有时它会突然“跳跃”一点。当您滚动到一端时,它真的很明显。如果您已经一直向右滚动,并且您总是向右移动手指,偶尔它会向左跳一帧。

我在上面添加了日志记录行并获得了这个输出(为了便于阅读而编辑):

50.913: Mouse mLastMotionPos: 304 ev.getX(): 379.0 mPos: 0 ev.getPointerId(0): 0 ev.getEventTime(): 111690077
50.928: Mouse mLastMotionPos: 379 ev.getX(): 369.0 mPos: 0 ev.getPointerId(0): 0 ev.getEventTime(): 111690093
50.943: Mouse mLastMotionPos: 369 ev.getX(): 384.0 mPos: 10 ev.getPointerId(0): 0 ev.getEventTime(): 111690109
50.958: Mouse mLastMotionPos: 384 ev.getX(): 391.0 mPos: 0 ev.getPointerId(0): 0 ev.getEventTime(): 111690125
50.983: Mouse mLastMotionPos: 391 ev.getX(): 399.0 mPos: 0 ev.getPointerId(0): 0 ev.getEventTime(): 111690141
51.023: Mouse mLastMotionPos: 399 ev.getX(): 399.0 mPos: 0 ev.getPointerId(0): 0 ev.getEventTime(): 111690186

请注意,它跳跃了 10 个像素!我发誓我只是把我的手指向右拖,而且是经过深思熟虑的。起初我以为 Android 可能会乱序传递事件或其他什么,但事件时间是单调的。

知道为什么会这样吗?我想这可能是三星的错(我有 Galaxy S2)。它确实a retarded driver-imposed touch threshold因此,无论是谁编写输入驱动程序,显然都不知道他们在做什么。不过,10 像素似乎是一个很大的飞跃。有时甚至更大!

最佳答案

稍后,但也许它会对其他人有用,如果您只对延迟感兴趣而不对实际的 MotionEvent 位置感兴趣,则可以使用 getRawX() 和 getRawY() 方法。我遇到了完全相同的问题,我改变了获取坐标的方式,瞧!!!它正在工作。

关于android - 奇怪的跳跃在 Android MotionEvent 触摸位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12912600/

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