Android 带按钮的Drawable移动

Android 带按钮的Drawable移动,android,button,Android,Button,我学习android已经快一个月了,我想用一个自定义类制作一个简单的游戏,该类从View扩展,并包含在main_activity.xml中。在Main Activity.class中,我创建了视图的一个实例,并使用按钮控制游戏视图上精灵的移动,因此每个按钮都有一个控制精灵移动的方法,如下所示: public void move_up(View v){ gameview.sprite.move(Dir.UP);} 问题是,它只在释放按钮时工作,并且只执行一次。我希望在按下botton时执行该方法

我学习android已经快一个月了,我想用一个自定义类制作一个简单的游戏,该类从View扩展,并包含在main_activity.xml中。在Main Activity.class中,我创建了视图的一个实例,并使用按钮控制游戏视图上精灵的移动,因此每个按钮都有一个控制精灵移动的方法,如下所示:

public void move_up(View v){
gameview.sprite.move(Dir.UP);}

问题是,它只在释放按钮时工作,并且只执行一次。我希望在按下botton时执行该方法,但我不知道如何执行。

根据方法的名称,我假设您正在将onClick属性添加到xml布局文件中以处理该事件。虽然一开始这看起来很方便,但它并不能满足你的需要

相反,您应该实现OnTouchListener,它为您提供有关当前正在发生的触摸事件的信息,在您的情况下,您希望处理操作\u DOWN操作:

尽管您可以让您的活动实现侦听器并在那里处理多个按钮。只需告诉您的活动实现OnTouchListener,我就可以实现上面代码中的onTouch方法,而不是作为您活动的方法

结果集将简化为findViewByIdR.id.btn_up.setOnTouchListenerthis;其中R.id.btn_up是您在xml文件中定义的id

这会使它在按下时开始移动,而不是在释放时,如果你想让它移动直到它们释放,这是有意义的,请执行以下操作:

if(event.getAction() == MotionEvent.ACTION_DOWN){
    gameview.sprite.move(Dir.UP); //Or whatever
    return true; //In case you wan to handle ACTION_UP
}else
if(event.getAction() == MotionEvent.ACTION_UP){
    gameview.sprite.stop(); //Or whatever you call the stop method
    return false;
}

这是一个清晰简洁的教程,你可以看看
if(event.getAction() == MotionEvent.ACTION_DOWN){
    gameview.sprite.move(Dir.UP); //Or whatever
    return true; //In case you wan to handle ACTION_UP
}else
if(event.getAction() == MotionEvent.ACTION_UP){
    gameview.sprite.stop(); //Or whatever you call the stop method
    return false;
}