Android :: Создание перетаскиваемого упругого шара? - PullRequest
0 голосов
/ 19 июля 2010

Я создал собственный вид загрузки изображения маленького шарика. Чтобы метод onDraw выглядел так:

public void onDraw(Canvas canvas) {
    canvas.drawBitmap(...);
}

Позже я добавил слушателя onTouch, чтобы иметь возможность прослушивать сенсорные события, чтобы шар мог перемещаться.

public boolean onTouchEvent(MotionEvent event) { 
        int eventaction = event.getAction(); 

        int X = (int)event.getX(); 
        int Y = (int)event.getY(); 

        switch (eventaction ) { 

        case MotionEvent.ACTION_MOVE:   // touch drag with the ball 
            // move the balls the same as the finger 
            ball.setX(X-25); 
            ball.setY(Y-25); 

            break; 
        } 
        // redraw the canvas 
        invalidate(); 
        return true; 
    } 

Теперь я пытаюсь заставить шар двигаться ТОЛЬКО по кривой, и если он не перемещается за фиксированную точку, верните его в исходное положение. Итак, передо мной стоят две проблемы:

  1. Фиксация траектории движения мяча
  2. Отбрасывание назад, оживляя это. Одна проблема, которую я наблюдаю, если я используйте ball.startAnimation, и если мяч был немного не в фокусе, мяч кажется нарезанным.

Ball Swing http://www.freeimagehosting.net/uploads/b68d5434ed.png

Есть предложения, пожалуйста?

1 Ответ

0 голосов
/ 19 июля 2010

Кривая, кажется, является частью круга, предполагая, что у нее есть центр и радиус.

Я бы предложила определить, что это такое, а затем написать функцию, которая, учитывая положение пальца, возвращаетгде вдоль кривой мяч должен быть.Для этого просто необходимо определить угол пальца по сравнению с центром круга, а затем использовать этот угол, чтобы правильно расположить шар, используя базовую тригонометрию.

Например, на вашей картинке шар находится под углом 0 °, а метка выглядит примерно на 20 °.

Затем вы можете определить, на какой угол должен отскочить шар, еслипалец мимо определенной точки (опять же, описанный углом от центра круга)

...