我无法在Android Studio中使用我的程序来正确约束我创建的操纵杆。我将两个ImageView放在一起,一个是操纵杆本身,一个是操纵杆的底座。这是代码:
case R.id.analogStick:
switch(me.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
x = me.getRawX();
y = me.getRawY();
System.out.println(x);
System.out.println(y);
dx = x - v.getX();
dy = y - v.getY();
break;
case MotionEvent.ACTION_UP:
v.setX(originX);
v.setY(originY);
break;
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_MOVE:
float xx = originX - me.getRawX();
float yy = originY - me.getRawY();
float displacement = (float) Math.sqrt((xx * xx) + (yy * yy));
if (displacement < baseRadius) {
v.setX(me.getRawX() - dx);
v.setY(me.getRawY() - dy);
}
else {
float ratio = (float) baseRadius / displacement;
float constrainedX = originX + (me.getRawX() - originX) * ratio;
float constrainedY = originY + (me.getRawY() - originY) * ratio;
v.setX(constrainedX);
v.setY(constrainedY);
}
break;
}
break;
这里的主要问题是计算位移时。即使在baseRadius的范围内,该值也会过高,因此程序始终转到else语句,始终执行受约束的操纵杆案例。我通过以下公式获得基本半径:baseRadius = baseJoystickImage.getWidth()/ 2,其中baseJoystickImage是ImageView变量。我不确定这里会出现什么问题,任何帮助都会受到赞赏。