将圆圈移向触摸点

时间:2015-09-08 11:40:08

标签: java android paint geometry ontouch

我试图将一个圆圈移动到我正在运行的应用程序中触摸的位置。我希望看到圆圈沿着一条路径向我触摸的方向移动。

我有三个班级:

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 coords和/或者可能需要速度值?!

也许我完全错了,而且要获得它还需要更多的数学。

感谢您的帮助

干杯

1 个答案:

答案 0 :(得分:0)

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

为了能够做到这一点,你需要跟踪:

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

使用linear interpolation计算每次onDraw电话中圈子的位置