我正在编写一个带有 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;
}
});
如果我犯了一些错误或其他什么,请告诉我?或者是否有其他方法可以获得正确的速度。
提前致谢!