onTouchEvent()导致“不幸的是app已经停止”

时间:2017-03-07 09:33:44

标签: android view draw ontouchevent

我正在写一个游戏,你一直按下屏幕让直升机飞起来。现在,当直升机与屏幕边界(单个设备的高度和宽度)发生碰撞时,活动结束

((Activity) context).finish();

当玩家在碰撞后快速停止时,它可以完美地运行,但是如果他坚持下去,我就会受到讨厌的错误。

Thant是我怀疑onTouchEvent方法

的原因
@Override
public boolean onTouchEvent(MotionEvent event) {
    // background music
    mp.start();
    mp.setLooping(true);
    copter.setVolume((float) 0.2, (float) 0.2);
    if (event.getAction() == MotionEvent.ACTION_DOWN && fuel > 0) {
        copter.start();
        copter.setLooping(true);
        if (!player.getPlaying()) {
            player.setPlaying(true);
            player.setUp(true);
            fuel--;
        } else {
            player.setUp(true);
            fuel--;
        }
        return true;
    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        copter.pause();
        player.setUp(false);
        return true;
    }
    return super.onTouchEvent(event);
}

碰撞后有没有办法忽略TouchEvents?或者OnTouchEvent甚至不是问题吗?

1 个答案:

答案 0 :(得分:0)

检查onTouchEvent()

中的活动是否为空

这里是代码:

@Override
public boolean onTouchEvent(MotionEvent event) {
    Activity activity = getActivity();
    if(activity != null){
        // background music
        mp.start();
        mp.setLooping(true);
        copter.setVolume((float) 0.2, (float) 0.2);
        if (event.getAction() == MotionEvent.ACTION_DOWN && fuel > 0) {
            copter.start();
            copter.setLooping(true);
            if (!player.getPlaying()) {
                player.setPlaying(true);
                player.setUp(true);
                fuel--;
            } else {
                player.setUp(true);
                fuel--;
            }
            return true;
        }
        if (event.getAction() == MotionEvent.ACTION_UP) {
            copter.pause();
            player.setUp(false);
            return true;
        }
        return super.onTouchEvent(event);
    }
    //return super.onTouchEvent(event);
    return false;
}

根据您的代码,您应该使用:

if(((Activity)context) != null){

而不是

Activity activity = getActivity();
if(activity != null){

如果这不是问题,请添加错误堆栈跟踪。

<强>更新

通过电子邮件发送堆栈跟踪:

Intent mailIntent = new Intent(Intent.ACTION_SENDTO);
mailIntent.setData(Uri.parse("mailto:"));
mailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"mail@gmail.com"});
mailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
mailIntent.putExtra(Intent.EXTRA_TEXT, stacktraceText);
Intent mailChooserIntent = Intent.createChooser(mailIntent, "Title");

context.startActivity(mailChooserIntent);