CWAC Camera - реализовать пользовательский интерфейс

Я использую библиотеку, созданную commonsware, чтобы сделать простое приложение для камеры. В прочитанном мной есть раздел, который заявляет это:

Вы можете создать подкласс CameraFragment и переопределить onCreateView(). Цепочка к суперклассу, чтобы получить собственный пользовательский интерфейс CameraFragment, затем обернуть его в свой собственный контейнер с дополнительными виджетами и вернуть комбинированный пользовательский интерфейс из вашего onCreateView().

Я все еще не очень хорошо разбираюсь с фрагментами Android, поэтому я надеялся, что кто-нибудь сможет объяснить мне это немного лучше.

У меня есть два действия (A, B), один фрагмент (CamFragment) и два макета (A, B). Мое первое действие (A) загружает макет (A), который имеет одну кнопку и imageView. Кнопка запускает второе действие (B), которое загружает фрагмент (CamFragment) со вторым макетом (B). Второй макет взят из демонстрационного приложения:

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

Итак, теперь в моем приложении я хочу кнопку на фрагменте камеры / втором действии, которая возьмет Picture() на клик. Следуя инструкциям, приведенным в файле 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, затем обернуть его в свой собственный контейнер с дополнительными виджетами и вернуть комбинированный пользовательский интерфейс из вашего onCreateView().

Я просто не совсем уверен, что это значит / влечет за собой. Было бы здорово, если бы была демоверсия с пользовательским интерфейсом камеры без actionBar, так как я чувствую, что большинство разработчиков не будут помещать элементы управления в панель действий.

РЕДАКТИРОВАНИЕ № 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 ответ

Далее я должен переопределить onCreateView. Опять же, тривиальная задача, как в демонстрации v9.

Ваш код не переопределяет onCreateView(), Это переопределяет onCreate(),

Я просто не совсем уверен, что это значит / влечет за собой.

"Цепочка к суперклассу, чтобы получить собственный интерфейс CameraFragment"

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);
Другие вопросы по тегам