我正在尝试计算我实施的可旋转轮的加速度。
但我很难搞清楚如何计算。所以任何可以帮助我的提示都值得赞赏
轮子本身是在我的onDraw()
方法上创建的。
如何旋转滚轮
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (rotationEnabled) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
double currentAngle = getAngle(motionEvent.getX(), motionEvent.getY());
rotateMe((float) (startAngle - currentAngle));
startAngle = startAngle - currentAngle;
break;
case MotionEvent.ACTION_UP:
break;
}
}
return false;
}
private double getAngle(double xTouch, double yTouch) {
double x = xTouch - (getMeasuredWidth() / 2d);
double y = getMeasuredHeight() - yTouch - (getMeasuredHeight() / 2d);
switch (getQuadrant(x, y)) {
case 1:
return Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI;
case 2:
return 180 - Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI;
case 3:
return 180 + (-1 * Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI);
case 4:
return 360 + Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI;
default:
return 0;
}
}
private static int getQuadrant(double x, double y) {
if (x >= 0) {
return y >= 0 ? 1 : 4;
} else {
return y >= 0 ? 2 : 3;
}
}
private void rotateMe(float degrees) {
setRotation(degrees);
}
更新
目标是设置计时器。这可以从几分钟到几小时。我需要加速从几分钟跳到几分钟。所有这些都应该取决于用户拖动车轮的速度
因此触摸后事件(当用户停止触摸滚轮时)。应该没有附加速度。