java android путь анимации - PullRequest
       4

java android путь анимации

0 голосов
/ 01 апреля 2020

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

Вот изображение моего проекта: мой проект

Моя цель это нарисовать анимированный путь от одного круга к другому.

Код:

 public void init(@Nullable AttributeSet attr) {
        circle = new Paint();
        circle.setColor(Color.GREEN);
        circle.setStyle(Paint.Style.FILL);
        circle.setAntiAlias(true);

        line = new Paint();
        line.setColor(Color.GREEN);
        line.setStyle(Paint.Style.STROKE);
        line.setStrokeWidth(10);
        line.setAntiAlias(true);


        Collections.addAll(height, 100, 20, 50, 40, 70, 10, 50); // in percent
        System.out.println(height.size() + " this is the size");
    }

    @Override
    protected void onDraw(Canvas canvas) {
        float y = getHeight() / 20 * 14;
        float x = getWidth() / 8;
        float radius = (canvas.getWidth() * canvas.getHeight()) / 40940;
        for (int c = 1; c < 8; c++) {
            System.out.println("at " + c);
            canvas.drawCircle(x * c, y - ((getHeight() / 20) * (height.get(c - 1) / 10)), radius, circle);
            points.add(new PointF(x * c, (y - ((getHeight() / 20) * (height.get(c - 1) / 10)))));
        }

    }

Пожалуйста, помогите,

Спасибо

1 Ответ

0 голосов
/ 01 апреля 2020

вам просто нужно анимировать путь с помощью ValueAnimator

создать один объект пути

Path path = new Path();

и создать аниматор

ValueAnimator animator = new ValueAnimator();
float startX = // starting circle x co-ordinate
float startY = // starting circle y co-ordinate
float endX = // end circle x co-ordinate
float endY = // end circle y co-ordinate
PropertyValuesHolder propertyX = PropertyValuesHolder.ofFloat("x",startX,endX);
PropertyValuesHolder propertyY = PropertyValuesHolder.ofFloat("y",startY,endY);
valueAnimator.setValues(propertyX,propertyY);
valueAnimator.setDuration(1000); // animation time
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float x = (float) animation.getAnimatedValue("x");
            float y = (float) animation.getAnimatedValue("y");
            path.lineTo(x,y);
            invalidate();
        }
    });
valueAnimator.start();

и в onDraw () нарисовать путь

canvas.drawPath(path,paint);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...