2014-02-20 6 views
1

Я пытаюсь создать кнопку камеры переключателя с моим пользовательским gui. В моей CustomCam extends SherlockFragmentActivity у меня есть метод, называемый onSwitch(), который вызывается из XML-андроида: OnClick = «onSwitch»Камера CWAC - кнопка кнопки переключателя кнопки-переключателя

Вот метод:

public void onClickSwitchButton(View view) { 
     if (current == std) { 
      ffc = CustomCamFragment.newInstance(true); 
      current = ffc; 
      getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container, current).commit(); 
      isFrontCamera=true; 

      return; 

     } 


     if (current == ffc) { 
      std = CustomCamFragment.newInstance(false); 
      current = std; 
      isFrontCamera=false; 
     } 

     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.container, current).commit(); 
    } 

Я знаю, что этот метод вызывает из контрольных точек и log, но мой экран просто становится черным, а затем возвращается как одно и то же std-представление.

Примечание: Я понимаю, что я должен определить, имеет ли телефон более 1 камеры или вообще нет камер. Но пока это приложение не то, что я буду публиковать. Просто хочу это для моего личного использования.

Мой CustomCamFragment:

public class CustomCamFragment extends CameraFragment { 

private static final String KEY_USE_FFC = "com.commonsware.cwac.camera.demo.USE_FFC"; 

public static CustomCamFragment newInstance(boolean useFFC) { 
    CustomCamFragment f = new CustomCamFragment(); 
    Bundle args = new Bundle(); 

    args.putBoolean(KEY_USE_FFC, useFFC); 
    f.setArguments(args); 
    return (f); 
} 
+0

«но мой экран просто потемнеет, а затем возвращается как один и тот же std-просмотр» - я понятия не имею, что вы подразумеваете под этим, извините. – CommonsWare

+0

Похоже, что он пытается переключиться на ffc (временно идет черным), но он возвращается с помощью видеопотока с камеры std. –

ответ

0

Ну, я понятия не имею, что CustomCamFragment есть. Однако ваш код, похоже, не переключается на другую камеру. Вы создаете CustomCamFragment через свой конструктор и не говорите, какую камеру использовать. Вы заметите, что не работает the demo app, где я использую заводской метод и передаю какую камеру использовать (DemoCameraFragment.newInstance(false) для камеры заднего вида, DemoCameraFragment.newInstance(true) для передней камеры).

+0

Я включил свой код CustomCamFragment выше. Он должен быть идентичен вашему. Я не уверен, почему он не работает. Не могли бы вы взглянуть? Я использую Demo-v9 в качестве примера, но до сих пор не понимаю, что может заставить его не переключаться. –

+0

@ user2676468: Одна проблема, возможно, не связанная с ней, заключается в том, что вы каждый раз создаете экземпляры 'CustomCamFragment'. Создавайте только одну камеру, повторно используя существующий экземпляр, если он у вас есть. Кроме того, используете ли вы значение из своих аргументов 'Bundle'? В демонстрационном приложении это 'useFrontFacingCamera()' на внутреннем классе DemoCameraHost 'DemoCameraFragment'. – CommonsWare

+0

Хм ... Я использую свой собственный класс хозяев камеры. 'public class CustomCamHost расширяет SimpleCameraHost' и не использует метод' useFrontFacingCamera() '. Теперь, как передать этот класс истинному или ложному значению? –

0

Чтобы ответить на ваш последний комментарий о встраивании в отрывках: Я отключил throw new IllegalArgumentException(...) из конструктора CameraView в библиотеке и призываю setHost себя от моего обычая CameraFragment в onCreateView. Таким образом, контекст CameraView не должен быть CameraHostProvider, и вы можете разместить представление внутри фрагмента.

0

Я хочу переключить переднюю/заднюю камеру, не нажимая новый фрагмент. После изучения кода CameraView и CameraHost (SimpleCameraHost), я думаю, что лучшим решением будет просто удалить текущий экземпляр CameraView и добавить новый:

public class MyCameraFragment extends CameraFragment { 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    addCameraView(view); 
} 

private void addCameraView(View view) { 
    FrameLayout frame = (FrameLayout)v.findViewById(R.id.cameraFrame); 
    frame.removeAllViews(); 
    cameraView = new CameraView(getActivity()); 
    cameraView.setHost(cameraHost = new MyCameraHost(getActivity())); 
    setCameraView(cameraView); 
    frame.addView(cameraView); 
} 

private void doSwitchCamera() { 
    // do some change to the settings. 
    useFrontFacingCamera = !useFrontFacingCamera; 
    if (null != cameraView) { 
     cameraView.onPause(); 
    } 
    addCameraView(getView()); 
cameraView.onResume(); 
} 

} 

Я надеюсь, что это может, поможет кому-то, кто хочет сохранить свой фрагмент нетронутый/простой код.

+0

Это работает над добавлением небольшой функциональности. – Droidekas

Смежные вопросы