Android перемещает объект по дорожке - PullRequest
16 голосов
/ 27 мая 2011

Я создал путь в виде круга и отобразил их обоих на экране следующим образом:

public void onDraw(Canvas canvas){

        Path sPath = new Path();
        sPath.moveTo(100, 100);
        sPath.lineTo(300, 100);
        sPath.lineTo(300, 300);
        sPath.lineTo(100,300);
        sPath.lineTo(100,100);
        sPath.close();

        Paint ballPaint = new Paint();
        ballPaint.setColor(Color.GREEN);
        Paint pathPaint = new Paint();
        pathPaint.setColor(Color.BLUE);

        canvas.drawPath(sPath, ballPaint);
        canvas.drawCircle(100,100,20,pathPaint);
    }

Я хотел бы, чтобы круг двигался по дорожке, как я могу это сделать?

Ответы [ 4 ]

16 голосов
/ 29 января 2012

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

int iCurStep = 0;// current animation step

@Override
protected void onDraw(Canvas canvas) {
    PathMeasure pm = new PathMeasure(sPath, false);
    float fSegmentLen = pm.getLength() / 20;//we'll get 20 points from path to animate the circle
    float afP[] = {0f, 0f};

    if (iCurStep <= 20) {
        pm.getPosTan(fSegmentLen * iCurStep, afP, null);
        canvas.drawCircle(afP[0],afP[1],20,pathPaint);
        iCurStep++;
        invalidate();
    } else {
        iCurStep = 0;
    };
};
14 голосов
/ 15 мая 2015

Вот аниматоры, которые я использую:

Назначение: переместить представление «представление» вдоль пути «путь»

v21 +:

ValueAnimator pathAnimator = ObjectAnimator.ofFloat(view, "x", "y", path)

v11 +:

ValueAnimator pathAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);

pathAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
float[] point = new float[2];

@Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float val = animation.getAnimatedFraction();
        PathMeasure pathMeasure = new PathMeasure(path, true);
        pathMeasure.getPosTan(pathMeasure.getLength() * val, point, null);
        view.setX(point[0]);
        view.setY(point[1]);
    }
});
6 голосов
/ 13 января 2015

v21 +: это создает квадратичную кривую Безье на пути и анимирует вдоль него myView.

final Path path = new Path();
path.quadTo(controlX, controlY, finalX, finalY);
ObjectAnimator.ofFloat(myView, View.X, View.Y, path).start();
3 голосов
/ 27 мая 2011

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

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