向触摸点移动圆圈

Moving circle towards touched point

我正在尝试将一个圆圈移动到我在 运行 应用程序中触摸的点。我想看到圆圈沿着一条路径朝着我触摸的这一点移动。

我有三个类:

public class Drawing  extends View{
    Context ctx;
static Circle c1;

private float circleCenterX = 100;
private float circleCenterY = 100;

private float lerpX;
private float lerpY;

private float time = 25;

private float frames = 100;

public Drawing(Context context) {
        super(context);
        this.ctx = context;
        c1 = new Circle (165, 350, 33);
    }

public void update(float x, float y) {
    this.circleCenterX = x;
    this.circleCenterY = y;
}

protected void onDraw (android.graphics.Canvas canvas){
    Paint p = new Paint();

    p.setColor(Color.GREEN);

    lerpX = (circleCenterX - c1.getX()) * (time / frames) + c1.getX();
    lerpY = (circleCenterY - c1.getY()) * (time / frames) + c1.getY();

    canvas.drawCircle(lerpX, lerpY, c1.getR(), p);

    c1.setX(lerpX);
    c1.setY(lerpY);
}

public class Circle {
private float x;
private float y;
private float r;
public Circle(float x, float y, float r) {
    super();
    this.x = x;
    this.y = y;
    this.r = r;
}
public float getX() {
    return x;
}
public void setX(float x) {
    this.x = x;
}
public float getY() {
    return y;
}
public void setY(float y) {
    this.y = y;
}
public float getR() {
    return r;
}
public void setR(float r) {
    this.r = r;
}`
public class Game extends Activity implements OnTouchListener {

 Drawing d;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     d=new Drawing(this);

     setContentView(d);
     d.setOnTouchListener(this);
 }

 @Override
 public boolean onTouch(View v, MotionEvent me) {

     d.update(me.getX(), me.getY());
     d.invalidate();
     return true;
 }

我想我需要 while 或 for 循环来增加 x 和 y 坐标,或者可能需要一个速度值?!

也许我完全错了,要得到它需要更多的数学知识。

感谢您的帮助

干杯

每次调用 onDraw 时,您需要稍微移动圆圈。最简单的方法就是每次调用时移动一定数量的像素。

要做到这一点,您需要跟踪:

  • 动画开始的地方
  • 你希望动画结束的地方

使用linear interpolation计算每个onDraw调用中圆圈的位置