从frameLayout中的surfaceView调用bringChildToFront()不起作用?

时间:2012-01-04 18:59:17

标签: android parent-child surfaceview android-framelayout

你可以将一个surfaceView子项添加到frameLayout,然后调用bringChildToFront()将另一个子视图带到surfaceView前面吗?

这是我制作的第一个Android应用程序,所以如果我的设置有任何意义,或者我在错误的地方做错了,请告诉我。

  • 我有一个活动,它有一个FrameLayout。
  • 我有2个视图(名为pauseMenuView和mainMenuView),它们只是具有4个按钮的视图。这些菜单按钮通过覆盖我的活动中的onClick()来处理。
  • 我有第三个自定义视图(称为gameView),它扩展了SurfaceView。这是我目前处理几乎所有关于我的游戏玩法(处理触摸事件,绘制图形,动画,碰撞检测)的地方。我有一个单独的线程来控制游戏的状态(暂停,取消暂停等)和帧率。

所以基本上,在玩游戏时,我在屏幕的左上角有一个暂停图标。我试图这样做,以便当他们触摸该图标时,我的gameView的onTouchEvent调用bringChildToFront(pauseMenuView)来显示暂停菜单。但是,当我调用bringChildToFront()或bringToFront()时,没有任何事情发生,好像它们没有效果。我的gameView仍然可见。

以下是我的活动中的相关代码:

public static final int INDEX_MAIN_MENU_VIEW = 0;
public static final int INDEX_PAUSE_MENU_VIEW = 1;
public static final int INDEX_GAMEVIEW_VIEW = 2;

fl = new FrameLayout(this);
LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
fl.setLayoutParams(lp);

mainMenuView = View.inflate(this, R.layout.main_menu,null);
pauseMenuView = View.inflate(this, R.layout.pause_menu, null);

fl.addView(mainMenuView, INDEX_MAIN_MENU_VIEW);
fl.addView(pauseMenuView, INDEX_PAUSE_MENU_VIEW);

setContentView(fl);

View onePlayerButton = findViewById(R.id.onePlayer_button);        
onePlayerButton.setOnClickListener(this);
/* then i set up a bunch of pauseMenu and mainMenu buttons the same way, so I won't put them here */

fl.bringChildToFront(mainMenuView);

因此,当应用程序启动时,mainMenuView将被带到前面,当玩家点击onePlayerButton时,会创建一个gameView并将其添加到frameLayout,然后将其带到前面,然后用户开始玩游戏。

    gv = new GameView(this, 1);
    fl.addView(fv, INDEX_GAMEVIEW_VIEW);
    fl.bringChildToFront(gv);
    fl.invalidate();

然后,当在游戏中,当用户点击我的gameView中的暂停图标时,onTouchEvent()方法会抓住它并执行此操作。 (我只是让我的pauseMenuView公开所以我的gameView可以看到它)...好像我的程序直接进入mThread.pause()行并且没有对前两行做任何事情......我试过了将gameView设置为隐藏在这里,当我这样做时,屏幕是完全黑色的,但如果暂停菜单可见,我可以单击暂停按钮所在的位置,它们实际上会被我的活动的onClick()检测到!这是怎么回事?

    ((TestGame)getContext()).fl.bringChildToFront(((TestGame)getContext()).pauseMenuView);
    ((TestGame)getContext()).pauseMenuView.bringToFront();
    mThread.pause();

0 个答案:

没有答案