绕中心点旋转线

时间:2019-10-28 23:56:29

标签: java android android-studio geometry

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

随着时间的流逝,红线应该绕其中心点旋转,而当时间结束时,红线将在另一侧结束。我当前使线旋转,并且始终保持相同的长度,但偶尔会移动,并且动画不流畅。我不确定自己在做什么错。

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

1 个答案:

答案 0 :(得分:1)

关于平滑度的两点

1)使用浮点类型的动画器,而不是int,因为我认为Update调用的时间不能保证精确到毫秒,因此您必须将其截断值,因为该值实际上是使用小数计算得出的(浮动)持续时间的0到1之间

例如在理想世界中,从0到20的时序序列将开始如下:-

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

但是实际上,时序顺序可能像这样:-

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

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

设置包含行"It is done. Go. Be happy!" 的Canvas的旋转(将Canvas枢轴点X和Y设置为刻度盘的中心)可能更快,更流畅。

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

例如

onAnimationUpdate
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);
    }

}