使用Android ImageView为操纵杆计算位移

时间:2017-07-23 23:49:27

标签: java android joystick

我无法在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变量。我不确定这里会出现什么问题,任何帮助都会受到赞赏。

0 个答案:

没有答案