如何在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;
}