绕中心点旋转一条线



我目前正在开发一款带有计时器的游戏。

随着时间的推移,红线应该绕其中心点旋转,当时间结束时,红线会在相反的一侧结束。我现在让这条线旋转,它一直保持不变的长度,但它偶尔会移动,动画也不流畅。我不完全确定我在这里做错了什么。

startX和Y是线的起始终点,endX和Y为线在250 psi 时的终点

关于平滑的两点

1( 使用float类型的动画师,而不是int,因为我认为Update调用的时间不能保证是毫秒级的准确,因此你强迫它截断值,因为值实际上是使用持续时间的0到1之间的分数(float(计算的

例如,在一个完美的世界里,0到20的时序开始时是这样的:-

  • 0ms=0
  • 500ms=1
  • 1000ms=2

但事实上,时序可能会像这样开始:-

  • 0ms=0
  • 499ms=0.999(转换为int时也为0(
  • 1000ms=2

2(重新计算直线的起点和终点以重新绘制它可能不是最快的方法,因此也是最平滑的方法。

设置包含线onAnimationUpdate(画布枢轴点X和Y设置为表盘中心(的画布的旋转可能更快、更平滑

这是因为这很可能是硬件加速转换

例如

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class Drawline extends View {
Paint paint = new Paint();
private void init() {
paint.setColor(Color.BLACK);
}
public Drawline(Context context) {
super(context);
init();
}
public Drawline(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public Drawline(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawLine(100, 100, 150, 150, paint);
}
}
public class MainActivity extends AppCompatActivity {
Drawline drawLine;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawLine = new Drawline(this);
drawLine.setPivotX(100f);
drawLine.setPivotY(100f);
setContentView(drawLine);
ValueAnimator animator = ValueAnimator.ofFloat(0f, 20f);
animator.setDuration(10000);
animator.setInterpolator(new LinearInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float x = (float) animation.getAnimatedValue();
drawLine.setRotation(x);
drawLine.invalidate();
}
});
animator.start();
}
}

最新更新