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);