Android - 以圆圈形式移动对象

时间:2011-10-10 03:20:47

标签: java android eclipse geometry

我遇到了麻烦, 我需要让一个物体(乒乓球拍)只沿着屏幕的圆形路线移动。 同样的事情就好像你有一个恒定的y轴值,它只会沿着x轴移动,因为你将手指拖到它上面,但是要将它限制在一个圆形路线上。

任何见解? 我看到了这件事 http://www.kirupa.com/developer/mx/circular.htm

它只会帮助弄清楚如何在一个圆圈上不停地移动某些东西(虽然它是Flash,但想法是一样的)

由于

2 个答案:

答案 0 :(得分:3)

圆圈上的点可以由函数定义:

x = a + r cos(θ)
y = b + r sin(θ)

其中(a,b)是圆圈的中心。

根据您所希望的速度,您可以说您希望每T秒发生一次完整的循环。如果t是动画开始后的时间:

θ = (360 / T) * (t % T)

您可以使用这些功能创建自己的ViewAnimation,OpenGL功能,或者如果您使用画布,则可以在onDraw()事件期间设置球拍的位置。

答案 1 :(得分:2)

以下是我用一根手指旋转图像视图的代码块。

private float mCenterX, mCenterY;
private float direction = 0;
private float sX, sY;
private float startDirection=0;
private void touchStart(float x, float y) {
    mCenterX = this.getWidth() / 2;
    mCenterY = this.getHeight() / 2;
    sX = x;
    sY = y;
}

private void touchMove(float x, float y) {
    // this calculate the angle the image rotate
    float angle = (float) angleBetween2Lines(mCenterX, mCenterY, sX, sY, x,
            y);
    direction = (float) Math.toDegrees(angle) * -1 + startDirection;
    this.invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.rotate(direction, mCenterX, mCenterY);
    super.onDraw(canvas);
}

@Override
public boolean onTouchEvent(MotionEvent event) {

    float x = event.getX();
    float y = event.getY();
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
         // record the start position of finger
        touchStart(x, y);
        break;
    case MotionEvent.ACTION_MOVE:
         // update image angle
        touchMove(x, y);
        break;
    case MotionEvent.ACTION_UP:
        startDirection = direction;
        break;
    }

    return true;
}

public double angleBetween2Lines(float centerX, float centerY, float x1,
        float y1, float x2, float y2) {
    double angle1 = Math.atan2(y1 - centerY, x1 - centerX);
    double angle2 = Math.atan2(y2 - centerY, x2 - centerX);
    return angle1 - angle2;
}

希望这个帮助

编辑:基本上,上面的代码所做的是使用户能够旋转图像,并且图像的中心不会改变。 angleBetween2Line()用于计算手指在中心为图像中心的圆圈中移动的程度。