Анимация - перемещение кнопки (или любого вида) по эллиптической кривой - PullRequest
0 голосов
/ 01 октября 2018

Моя цель - переместить виджет как кнопку справа налево.Но он не должен двигаться по прямой линии.Он должен следовать по эллиптическому пути.

Моя идея состояла в том, чтобы вычислить хороший путь эллиптической кривой на основе заданных x-координат.Формула, которую я использую, можно увидеть здесь: https://www.wolframalpha.com/input/?i=y%3D(pi+*+x%5E2)+%2F-2+%2B+5.Я немного изменил значение смещения.Я реализовал это следующим образом:

Point computeY(int x){

        int y;

        y=(int)(Math.PI * x * x) /-2 + 5;

        Point result = new Point(x, y);

        return result;
}

Все значения x хранятся в массиве:

int[] array = {1088,878,544,165,0};

Итак, следующий цикл принимает каждое значение x и передает его вфункция выше, которая вычисляет y-значение и возвращает весь объект Point.Этот объект добавляется в ArrayList:

 List<Point> list = new ArrayList<Point>();

 for(int i=0; i<array.length; i++){
     int xVal = array[i];

     Point coordinate = computeY(xVal);
     list.add(coordinate);
 }

Далее ObjectAnimator встает на место и выполняет оставшуюся часть:

Path pathTest = new Path();

pathTest.moveTo(list.get(0).x, list.get(0).y);

for (int i = 1; i < list.size(); i++) {
    pathTest.lineTo(list.get(i).x, list.get(i).y);
}


ObjectAnimator animator = ObjectAnimator.ofFloat(tvLabel, View.X, View.Y, pathTest);
animator.setDuration(5000);
animator.start();

enter image description here

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

Эскиз того, что я хотел: enter image description here

Есть ли лучший способ сделать это?

Заранее спасибо,

...