要在Android上实现沿路径动画地改变颜色,可以使用ValueAnimator和PathInterpolator。
首先,在XML布局文件中创建一个View,用于显示动画效果:
接下来,在Activity中,可以通过ValueAnimator和PathInterpolator来创建动画。在这个示例中,我们将颜色从蓝色渐变到红色,并沿着一个半圆的路径移动:
import android.animation.Animator;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.graphics.Path;
import android.graphics.PathMeasure;
import android.os.Bundle;
import android.view.View;
import android.view.animation.PathInterpolator;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private View colorView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
colorView = findViewById(R.id.colorView);
// 创建路径
Path path = new Path();
path.arcTo(0f, 0f, 500f, 500f, 0f, 180f, true);
// 创建路径测量器
PathMeasure pathMeasure = new PathMeasure(path, false);
// 获取路径的长度
float pathLength = pathMeasure.getLength();
// 创建动画
ValueAnimator colorAnimator = ValueAnimator.ofFloat(0f, pathLength);
colorAnimator.setDuration(5000);
colorAnimator.setInterpolator(new PathInterpolator(0.5f, 0f));
colorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// 获取当前动画的进度
float progress = (float) animation.getAnimatedValue();
// 获取当前位置的坐标
float[] point = new float[2];
pathMeasure.getPosTan(progress, point, null);
// 设置View的位置
colorView.setX(point[0]);
colorView.setY(point[1]);
// 设置View的颜色
int color = (int) new ArgbEvaluator().evaluate(progress / pathLength, getResources().getColor(R.color.colorAccent), getResources().getColor(R.color.colorPrimary));
colorView.setBackgroundColor(color);
}
});
// 启动动画
colorAnimator.start();
}
}
在这个示例中,我们创建了一个半圆形的路径,并使用ValueAnimator沿着这个路径进行动画。在动画更新的监听器中,我们通过PathMeasure获取当前位置的坐标,并根据位置的进度改变View的位置和颜色。我们使用ArgbEvaluator来计算颜色的过渡值。
运行示例代码,你将看到View沿着半圆形路径进行动画,并且颜色从蓝色渐变到红色。