我正在用车辆进行游戏,我想在按下画布这样的东西的同时移动这辆车,但这是行不通的。
public boolean onTouch(View v, MotionEvent event) {
if (event.getX() > 0 && event.getX() < 150 && event.getY() > 550 && event.getY() < 700) {
do{
System.out.println("Hallo");
}while (canvas.isPressed());
return false;
但我只是得到以下输出:
D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
I/System.out: Hallo
有什么主意吗?
答案 0 :(得分:1)
设置一个全局布尔值,以知道何时接收到MotionEvent.ACTION_DOWN
事件。
mUserTouched = true; // Set to true when MotionEvent.ACTION_DOWN
mUserTouched = false; // set to false when MotionEvent.ACTION_UP is received
然后,您可能希望使用Timer
或其他一些会在收到MotionEvent.ACTION_DOWN时首先启动的循环程序。并根据某个时间间隔触发对invalidate()
的呼叫。 invalidate()
将导致View.onDraw()
被调用,以便您可以重新绘制汽车的位置。收到MotionEvent.ACTION_UP时,取消Timer
如果存在界限,则每当mUserTouched = false'
出现在界限之外时,您还需要设置MotionEvent
。
答案 1 :(得分:0)
可以在onTouch
或onTouchEvent
中完成,就像这样:
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
// Player has touched the screen
case MotionEvent.ACTION_DOWN:
System.out.println("Hallo");
break;
// Player has removed finger from screen
case MotionEvent.ACTION_UP:
break;
}
return true;
}