Drawable的按钮运动

时间:2015-04-25 21:17:38

标签: android button

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

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

问题是它只在释放按钮时有效,并且执行一次。我希望在按下按钮时执行该方法,但我无法弄清楚如何执行此操作。

1 个答案:

答案 0 :(得分:0)

我假设你的方法名称是为了处理事件而将onClick属性添加到xml布局文件中。虽然这看起来很方便但它不会给你你所需要的东西。

相反,您应该实施OnTouchListener,它会为您提供有关当前正在发生的触摸事件的信息,在您要处理ACTION_DOWN操作的情况下:

findViewById(R.id.btn_up).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            gameview.sprite.move(Dir.UP); //Or whatever
            return true; //In case you wan to handle ACTION_UP
        }
        return false;
    }
});

虽然您可以让Activity实现侦听器并在那里处理多个按钮。这可以通过告诉您的活动实施OnTouchListener,实现方法onTouch,如上面的代码,而不是作为您的活动方法来实现。

结果集将简化为findViewById(R.id.btn_up).setOnTouchListener(this);,其中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;
}