同时按下多个按钮无法被检测到

3

我需要在一个Android项目中判断是否同时按下了两个按钮。我已经创建了一个OnTouchListener,并实现了onTouch()方法。但是当我同时按下两个按钮时,只能检测到第一个被按下的按钮。

@Override
protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.game_layout);

    mShootButton = (Button) findViewById(R.id.btn_shoot);
    mAccelerateButton = (Button) findViewById(R.id.btn_accelarate);

    MyTouchListener touchlistener = new MyTouchListener();
    MyTouchListener touchlistener2 = new MyTouchListener();
    mShootButton.setOnTouchListener(touchlistener);
    mAccelerateButton.setOnTouchListener(touchlistener2);
    super.onCreate(savedInstanceState);
}

public class MyTouchListener implements OnTouchListener {
    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        if(event.getAction() == MotionEvent.ACTION_DOWN && v.getId() == R.id.btn_shoot){
            setmShootButtonPressed(true);
        }
        else if(event.getAction() == MotionEvent.ACTION_UP && v.getId() == R.id.btn_shoot){
            setmShootButtonPressed(false);
        }

        if(event.getAction() == MotionEvent.ACTION_DOWN && v.getId() == R.id.btn_accelarate){
            setmAccelerateButtonPressed(true);
        }
        else if(event.getAction() == MotionEvent.ACTION_UP && v.getId() == R.id.btn_accelarate){
            setmAccelerateButtonPressed(false);
        }
        return true;
    }
}

注:我的手机支持多点触控,我已经确认过了。

如果你正在制作游戏(看起来是这样),你可能想要摆脱按钮控制,转而使用像Cocos2D(http://www.cocos2d-x.org)这样的东西,它具有游戏手柄控制和多点触控支持。 - David S.
1个回答

2
尝试在包含按钮的布局上使用android:splitMotionEvents="true"
说明:Android按钮不是设计用于同时被触摸。其中一个会消耗触摸事件,布局容器不会调用另一个按钮的onTouch事件。
作为替代方案,您可以创建一个自定义视图来处理两个按钮的点击检测逻辑。
参见:Android工作多点触控按钮

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接