CWAC相机 - 实现自定义gui

时间:2013-09-20 19:23:55

标签: java android android-camera commonsware-cwac

我正在使用commonsware创建的库来制作一个简单的相机应用程序。在给我看来,有一节说明了这一点:

  

您可以继承CameraFragment并覆盖onCreateView()。链到   获取CameraFragment自己的UI的超类,然后将其包装   您自己的容器和其他小部件,并返回组合的UI   来自你的onCreateView()。

我仍然不熟悉Android Fragments,所以我希望有人可以向我解释一下这一点。

我有两个活动(A,B),一个片段(CamFragment)和两个布局(A,B)。我的第一个活动(A)加载了一个布局(A),它有一个按钮和imageView。该按钮启动第二个活动(B),该活动加载具有第二个布局(B)的片段(CamFragment)。第二个布局取自演示应用程序:

<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"/>

所以,现在在我的应用程序中,我想在相机片段/第二个活动上有一个按钮,它将带有onPicture()onClick。按照自述文件中的说明,我需要先将子类化为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。

我只是不完全确定这意味着什么/需要什么。如果有一个演示,显示没有actionBar的自定义相机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"/>

1 个答案:

答案 0 :(得分:3)

  

接下来,我必须覆盖onCreateView。同样,一个简单的任务就像在v9演示中一样。

您的代码未覆盖onCreateView()。它会覆盖onCreate()

  

我只是不完全确定这意味着什么/需要。

“链接到超类以获取CameraFragment自己的UI”

View uiFromParent=super.onCreateView(inflater, container, savedInstanceState);

“然后使用其他小部件将其包装在您自己的容器中”

View yourUi=... // inflate something, create straight in Java, whatever
View theThingThatWillHoldThePreview=yourUi.findViewById(...); // or whatever

theThingThatWillHoldThePreview.addView(uiFromParent, ...); // with some appropriate LayoutParams

“并从onCreateView()返回组合的用户界面”

return(yourUi);