Android速度跟踪器给出错误的速度值

时间:2016-11-02 12:47:47

标签: android touch android-touch-event

我正在编写一个带有 facebook chat head 等元素的应用程序,可以使用finger在屏幕上自由移动。我试图找出视图的速度,以便在调用ACTION_UP后我可以决定视图的最终位置。问题是速度跟踪器返回的速度有时是正确的,但有一半是错误的。

很多时候,当我尝试将聊天头向右倾斜时,它会产生负x速度,这是一种不稳定的行为。所以我进入了手机的开发者设置并激活了指针位置选项。 现在,在手机的顶部,状态栏的顶部,显示的' Xv'值始终是正确的,但使用androidVelocityTracker测量的X速度的打印日志仍然不稳定。

这是我的代码:

chatHead.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int rawX = (int) event.getRawX();
        int rawY = (int) event.getRawY();
        int pointerIndex = 0;
        int pointerId = event.getPointerId(pointerIndex);

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN
                    //velocity tracker
                    if (mTracker == null) {
                        mTracker = VelocityTracker.obtain();
                    } else {
                        mTracker.clear();
                    }
                    mTracker.addMovement(event);
                    return true;

                case MotionEvent.ACTION_UP:
                    Log.d(TAG, "x velocity = " + lastKnownXVelocity);
                    Log.d(TAG, "y velocity = " + lastKnownYVelocity);
                    return true;

                case MotionEvent.ACTION_MOVE:
                    //01. add movement to velocity trakcer
                    mTracker.addMovement(event);
                    mTracker.computeCurrentVelocity(1000);
                    lastKnownXVelocity = VelocityTrackerCompat.getXVelocity(mTracker, pointerId);
                    lastKnownYVelocity = VelocityTrackerCompat.getYVelocity(mTracker, pointerId);
                    //lastKnownXVelocity = mTracker.getXVelocity(); //have also tried this code...it's shows no different results
                    //lastKnownYVelocity = mTracker.getYVelocity();

                    //02. code to drag the circle on pointer move
                    globalParams.x = paramsX;
                    globalParams.y = paramsY;
                    windowManager.updateViewLayout(chatHead, globalParams);
                    return true;

                case MotionEvent.ACTION_CANCEL:
                    // Return a VelocityTracker object back to be re-used by others.
                    mTracker.recycle();
                    break;
            }
            return false;
    }
});

如果我犯了一些错误或其他什么,请告诉我?或者是否有其他方法可以获得正确的速度。

提前致谢!

0 个答案:

没有答案