Ответ 1
Вам нужно будет немного передвинуть свой кружок по каждому кадру к следующей путевой точке и определить, как только он туда доберется, а затем начните движение к следующему. Нет встроенной системы, о которой я знаю.
Я создал путь по кругу и отобразил их на экране следующим образом:
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);
}
Я хотел бы, чтобы круг перемещался по пути, как я могу это сделать?
Вам нужно будет немного передвинуть свой кружок по каждому кадру к следующей путевой точке и определить, как только он туда доберется, а затем начните движение к следующему. Нет встроенной системы, о которой я знаю.
Да, возможно перемещать изображение по пути. Я дам простое решение, чтобы показать принцип. Следующий код будет анимировать круг вдоль пути.
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;
};
};
Вот аниматоры, которые я использую:
Цель: переместить вид "просмотреть" по пути "Путь"
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]);
}
});
v21 +: это создает квадратичную кривую Безье на пути и анимирует myView вдоль нее.
final Path path = new Path();
path.quadTo(controlX, controlY, finalX, finalY);
ObjectAnimator.ofFloat(myView, View.X, View.Y, path).start();