我正在尝试绘制自定义旋转动画。这是我的代码的输出。
基本上每个圈子都有小的子圈。唯一的问题是,有时动画会跳过一些帧,动画看起来会损坏。我的猜测是因为这个计算很耗时,所以会丢失一些帧。
我的问题是改善这一点并保持动画流畅的最佳方法是什么。是否可以只计算第一帧并旋转画布以便我们可以减少计算?
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int startRadius = 20;
int endRadius = 400;
int circleCount = 20;
int circleDistance = (int) (((endRadius - startRadius) / (float) circleCount));
for (int i = 0; i < circleCount; i++) {
int radius = startRadius + i * circleDistance;
canvas.drawCircle(center.x, center.y, radius, mPaint);
int subCircles=i+1;
double angleSegment = Math.PI * 2 / subCircles;
for (int segment = 0; segment < subCircles; segment++) {
double angle = angleSegment * segment + shiftAngle;
double x = Math.cos(angle) * radius;
double y = Math.sin(angle) * radius;
canvas.drawCircle((float) (x + center.x), (float) (y + center.y), 6, pointPaint);
}
}
}
动画师
public void startAnim() {
rotateAnim = ValueAnimator.ofInt(0, 100);
rotateAnim.setDuration(1000);
rotateAnim.setInterpolator(new LinearInterpolator());
rotateAnim.addUpdateListener(animation -> {
shiftAngle += Math.PI / 180;
View.this.invalidate();
});
rotateAnim.setRepeatCount(ValueAnimator.INFINITE);
rotateAnim.start();
}