3

コモンズウェアが作成したライブラリを使って簡単なカメラアプリを作っています。read me には、次のように記載されたセクションがあります。

CameraFragment をサブクラス化し、onCreateView() をオーバーライドできます。スーパークラスにチェーンして CameraFragment の独自の UI を取得し、追加のウィジェットを使用して独自のコンテナーにラップし、onCreateView() から結合された UI を返します。

私はまだ Android Fragments に慣れていないので、誰かがこれをもう少しうまく説明してくれることを期待していました。

2 つのアクティビティ (A、B)、1 つのフラグメント (CamFragment)、2 つのレイアウト (A、B) があります。最初のアクティビティ (A) は、1 つのボタンと imageView を持つレイアウト (A) を読み込みます。ボタンは 2 番目のアクティビティ (B) を開始し、フラグメント (CamFragment) を 2 番目のレイアウト (B) で読み込みます。2 番目のレイアウトは、デモ アプリから取得されます。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:ignore="MergeRootFrame"/>

したがって、私のアプリケーションでは、カメラ フラグメント/2 番目のアクティビティにボタンが必要です。readme の指示に従って、最初に CameraFragment をサブクラス化する必要があります。これは簡単です。

public class CamFragment extends CameraFragment {

次に、onCreateView をオーバーライドする必要があります。繰り返しますが、v9 デモと同様に簡単な作業です。

  @Override
  public void onCreate(Bundle state) {
    super.onCreate(state);

    setHasOptionsMenu(true);
    setHost(new DemoCameraHost(getActivity()));
  }

次の部分は私が本当に混乱するところです。誰かが助けてくれることを願っています。

スーパークラスにチェーンして CameraFragment の独自の UI を取得し、追加のウィジェットを使用して独自のコンテナーにラップし、onCreateView() から結合された UI を返します。

それが何を意味するのか、または何を伴うのか、完全にはわかりません。ほとんどの開発者はアクション バーにコントロールを配置しないように感じるので、アクション バーのないカスタム カメラ UI を示すデモがあれば最高です。

編集#1:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View uiFromParent=super.onCreateView(inflater, container, savedInstanceState);
    View yourUi = inflater.inflate(R.layout.main_cam, container, false);
    View theThingThatWillHoldThePreview = yourUi.findViewById(R.id.holder); // or whatever
    ((ViewGroup) theThingThatWillHoldThePreview).addView(uiFromParent); // with some appropriate LayoutParams
    return super.onCreateView(inflater, container, savedInstanceState);
}

main_cam.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_weight="1"
        android:background="@color/abs__bright_foreground_holo_dark"
        android:keepScreenOn="true"
        tools:ignore="MergeRootFrame" >
    </FrameLayout>

    <ImageButton
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:background="@color/abs__bright_foreground_holo_dark"
        android:src="@drawable/ic_launcher"
        android:text="Capture" />

</RelativeLayout>

cam_fragment.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:ignore="MergeRootFrame"/>
4

1 に答える 1