Android 从frameLayout内的surfaceView调用bringChildToFront()不会';不行?
能否将surfaceView子视图添加到frameLayout,然后调用bringChildToFront()将另一个子视图置于surfaceView前面 这是我制作的第一个android应用程序,请告诉我我的设置是否合理,或者我是否在错误的地方做了错误的事情Android 从frameLayout内的surfaceView调用bringChildToFront()不会';不行?,android,parent-child,surfaceview,android-framelayout,Android,Parent Child,Surfaceview,Android Framelayout,能否将surfaceView子视图添加到frameLayout,然后调用bringChildToFront()将另一个子视图置于surfaceView前面 这是我制作的第一个android应用程序,请告诉我我的设置是否合理,或者我是否在错误的地方做了错误的事情 我有一个活动,它有一个框架布局 我有两个视图(名为pauseMenuView和mainMenuView),它们只是有4个按钮的视图。这些菜单按钮是通过在我的活动中重写onClick()来处理的 我有一个扩展SurfaceView的第三个
- 我有一个活动,它有一个框架布局
- 我有两个视图(名为pauseMenuView和mainMenuView),它们只是有4个按钮的视图。这些菜单按钮是通过在我的活动中重写onClick()来处理的
- 我有一个扩展SurfaceView的第三个自定义视图(称为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时,会创建一个游戏视图并添加到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();
经过两天的搜索,我解决了我的错误。事实证明,关键是将我的gameView的背景色设置为彩色。透明,砰的一声,一切正常。。。我不知道设置是如此关键。希望其他遇到这个问题的人能比我更快地找到这个解决方案,哈哈。你的答案不清楚,如果我需要我的背景颜色是黄色而不是透明的呢?谢谢尼尔,你救了我。我在自定义SurfaceView上叠加了一个ImageButton,也遇到了类似的问题。如果我在视图上设置了.setRotation(float),它将不会在屏幕上显示(即使它应该是由于视图层次结构),但仍会响应触摸事件。很奇怪,在SurfaceView上设置背景色解决了我的问题。