0

電話のカメラを使用して写真を撮るアクティビティを持つプログラムを書いています。カメラの SurfaceView の下にキャプチャ ボタンがあります。ユーザーがキャプチャ ボタンを押すと、サーフェス ビューに画像のプレビューが表示されるようになり、このプレビューの下に 2 つのボタン (同意とキャンセル) が表示されます。ユーザーがキャンセルを押すと、プログラムはカメラのプレビューに戻って別の写真を撮る必要があります。

これには 2 つのレイアウトを定義する必要があると思いますが、アクティビティ内で 1 つのレイアウトから別のレイアウトに変更する方法がわかりません。

4

2 に答える 2

1

これを実現するには、複数の方法があります。

  1. ボタンは、layout.xml ファイル内のViewGroupieLinearLayoutで定義します。visibility="gone"次に、それらを表示するために呼び出しmyButtons.setVisibility(View.VISIBLE);ます。それらを再度非表示にするには、 を呼び出しますmyButtons.setVisibility(View.GONE);

  2. ボタンをプログラムで作成し、実行時に SurfaceView にアタッチします。

私はオプション1を好むでしょう。

于 2013-01-07T13:40:18.650 に答える
0

これには 2 つのフラグメントを使用できます。

最初のフラグメントには、カメラ ボタンのあるレイアウトがあります。2 番目のフラグメントには、プレビューと 2 つのボタンが受け入れ/キャンセルされます。

バックスタックを使用して、キャンセル (またはユーザーが戻る) で最初のフラグメントに戻ることができます。

フラグメントを別のフラグメントに置き換える方法を示す Fragments チュートリアル (http://developer.android.com/guide/components/fragments.html) のコードを次に示します。

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

また、キャンセル ボタンは popBackStack() を使用してバック スタックからフラグメントをポップできます (ユーザーによる Back コマンドをシミュレートします)。

別のオプションもあります。プレビューのカスタム レイアウトが必要ない場合は、カスタム カメラの使用をスキップして、startActivityForResult を使用してインテントとしてカメラを開くことができます。このインテントは、ユーザーが写真を撮ることを許可し (この場合、結果の写真をメインのアクティビティと通信します)、写真を撮らずにアプリに戻るキャンセル ボタンもあります。

于 2013-01-07T13:40:30.323 に答える