你可以将一个surfaceView子项添加到frameLayout,然后调用bringChildToFront()将另一个子视图带到surfaceView前面吗?
这是我制作的第一个Android应用程序,所以如果我的设置有任何意义,或者我在错误的地方做错了,请告诉我。
所以基本上,在玩游戏时,我在屏幕的左上角有一个暂停图标。我试图这样做,以便当他们触摸该图标时,我的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();