一些类的信息:
public class Maze3DActivity extends Activity;
class GLGameView extends GLSurfaceView;
其中glgameView 是 Maze3DActivity 调用的一个View。
当然Maze3DActivity 还包括其他的View
问题描述:
在glgameView中重写了 OnkeyDown()方法。但是
情形1:当只是触摸屏幕或者无任何操作,紧接着按虚拟机上的back键 就会直接终止整个程序 。
情形2:如果按了虚拟机上的键盘或者物理键盘,接着按back键,竟然能够实现指定的功能,也就是说事件可以捕获。重写的代码:
public onKeyDown()
case KeyEvent.KEYCODE_BACK: // 如果按下返回键
 if(event.getRepeatCount() == 0) {
 event.startTracking();
return true;
 }@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
Log.i("BACK", "DISPATCHkEYeVENT");
return super.dispatchKeyEvent(event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
activity.hd.sendEmptyMessage(GAME_MENU);
return true;
}
return super.onKeyUp(keyCode, event);
}补充说明:
在 情形1 下onkeydown、onkeyup,dispatchKeyEvent 这几个方法都没有进入。我尝试着在activity中重写onKeyDown()的方法,不过依然是无法捕获glgameView 中back 事件。 于是我又在activity中重写了onBackPressed()方法,这个倒是可以捕获任何一种情形的事件,但是这个方法一个参数都没有,我根本就不知道是从哪个view中按back键的。

解决方案 »

  1.   

    View收不到Back事件。
    在你的Activity
    public onKeyDown()
    case KeyEvent.KEYCODE_BACK: // 如果按下返回键
     WhichView.OnBack();//这里添加想监听回退键的View
    return true;
     }
      

  2.   

    关键是 连 onKeydown这个方法都进不去!
      

  3.   

    OK  知道错在哪里了 在activity 中把return true;写成return super.xxx了。但是为什么在view中只要按了键盘上的任意键,就可以在view中监听BACK键了?而否则就会像上面的情形1一样 直接把BACK时间提交给activity处理