surfaceViewの子をframeLayoutに追加してから、bringChildToFront()を呼び出して、別の子ビューをsurfaceViewの前に移動できますか?
これは私が作った最初のAndroidアプリです。セットアップに意味があるかどうか、または間違った場所で間違ったことをしている場合はお知らせください。
- FrameLayoutを持つアクティビティが1つあります。
- 2つのビュー(pauseMenuViewとmainMenuViewという名前)があります。これらは、4つのボタンがある単純なビューです。これらのメニューボタンは、アクティビティ内のonClick()をオーバーライドすることで処理されます。
- SurfaceViewを拡張する3番目のカスタムビュー(gameViewと呼ばれる)があります。これは、現在、ゲームプレイに関するほとんどすべて(タッチイベントの処理、グラフィックの描画、アニメーション、衝突検出)を処理している場所です。ゲームの状態(一時停止、一時停止なしなど)とフレームレートを制御するための個別のスレッドがあります。
つまり、基本的に、ゲームをプレイしている間、画面の左上隅に一時停止アイコンがあります。彼らがそのアイコンに触れたときに、私の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()行に直接移動し、最初の2行では何もしないようです...試しましたここでgameViewを非表示に設定すると、画面は完全に黒くなりますが、一時停止メニューが表示されている場合は一時停止ボタンがある場所をクリックできます。実際には、アクティビティのonClick()によって検出されます。ここで何が起こっているのですか?
((TestGame)getContext()).fl.bringChildToFront(((TestGame)getContext()).pauseMenuView);
((TestGame)getContext()).pauseMenuView.bringToFront();
mThread.pause();