如何在android中获取画布上对象的当前位置

如何在android中获取画布上对象的当前位置,android,android-canvas,Android,Android Canvas,我正在尝试使用Canvas和SurfaceView创建一个简单的球类游戏。我想在屏幕上移动球,为此我实现了onTouchEvent()。我成功地将球从屏幕上的任何位置移动。但我的问题是,每当我触摸屏幕并开始移动时,球就会从我触摸屏幕的点开始移动 我想把球从当前位置移走。开始移动时,如何获取当前位置 这是我的onTouchEvent() 我的draw方法是: private void draw(int updatedValue) { canvas = surfaceHolder.l

我正在尝试使用
Canvas
SurfaceView
创建一个简单的球类游戏。我想在屏幕上移动球,为此我实现了
onTouchEvent()
。我成功地将球从屏幕上的任何位置移动。但我的问题是,每当我触摸屏幕并开始移动时,球就会从我触摸屏幕的点开始移动

我想把球从当前位置移走。开始移动时,如何获取当前位置

这是我的
onTouchEvent()

我的
draw
方法是:

private void draw(int updatedValue) {
        canvas = surfaceHolder.lockCanvas();
        canvas.drawColor(Color.RED);
        canvas.drawBitmap(ball.getBitmap(), updatedValue, screenY - ball.getBitmap().getHeight() - 260, paint);
        surfaceHolder.unlockCanvasAndPost(canvas);
    }
这是我的Ball.java类:

public class Ball {

    private int ball_x, ball_y;
    private Bitmap bitmap;
    private int minX, maxX;

    public Ball(Context context, int screenX, int screenY) {

        bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_ball);
        maxX = screenX - bitmap.getHeight();
        minX = 0;

    }

这里的问题是,
updatedValue
是绝对位置。相反,这应该是一个增量值

public boolean onTouchEvent(MotionEvent event) {

    int updated_x = (int) event.getX();

    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_UP:
            System.out.println("Action Up");
            break;

        case MotionEvent.ACTION_DOWN:
            mInitial_x = updated_x;
            break;

        case MotionEvent.ACTION_MOVE:
            final int delta_x = mInitial_x - updated_x;
            draw(delta_x);
            System.out.println("Action Move");
            break;
    }
    return true;
}
在上面的代码中,我使用了一个int字段
mInitial_x
来跟踪您触摸的初始位置。基于此,现在你可以得到x中变化的增量值。在
draw()
方法中使用此增量值来更改
ball\u x
然后绘制


这里的关键不是使用绝对值,而是使用相对值。希望这有帮助。

u需要将
ball
对象设为当前x和y。您的
ball
对象的类型是什么?类似于
int previous\u x=ballObject.getX()
previous\u x=event.getX()
我不明白。请你详细说明一下好吗?你需要先知道球的位置是的,这就是问题所在
public boolean onTouchEvent(MotionEvent event) {

    int updated_x = (int) event.getX();

    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_UP:
            System.out.println("Action Up");
            break;

        case MotionEvent.ACTION_DOWN:
            mInitial_x = updated_x;
            break;

        case MotionEvent.ACTION_MOVE:
            final int delta_x = mInitial_x - updated_x;
            draw(delta_x);
            System.out.println("Action Move");
            break;
    }
    return true;
}