Привет, Я разрабатываю приложение с функцией Camera с помощью SurfaceView. Я хочу сделать снимок при создании поверхности.Выполнение фото в android
В методе onCreateView моего фрагмента инициализировано все, что мне нужно.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.game_one_start_fragment, container, false);
initWidgets(view);
return view;
}
В initWidgets() метод инициализации объекта SurfaceView, как показано ниже
mSurfaceView = (SurfaceView) view.findViewById(R.id.game_action_surfaceview);
mSurfaceHolder = mSurfaceView.getHolder();
В OnResume() Способ получения объекта surfaceHolder.
@Override
public void onResume() {
super.onResume();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
safeCameraOpen(Camera.CameraInfo.CAMERA_FACING_BACK);
}
safeCameraOpen() я следовал Android Developer link. Используется тот же код, что и упомянутый.
surfaceHolder.callback используется как ниже
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera.startPreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
try {
//to set the picture orientation
setCameraDisplayOrientation(getActivity(), findFrontFacingCameraID(), mCamera);
mCamera.startPreview();
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
Camera.Parameters parameters = mCamera.getParameters();
parameters.getSupportedPreviewSizes();
mCamera.setParameters(parameters);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
}
Я хочу, чтобы сделать снимок, когда фрагмент загружен.
Я попытался использовать методы жизненного цикла onViewCreated(), onResume() и onStart(). В них я использовал (метод mCamera объект создан и инициализирован в safeCameraOpen())
mCamera.takePicture(null,null,mPictureCallback);
следующую строку Если бы я попытался в упомянутых методов жизненного цикла, я получаю следующее сообщение об ошибке аварии.
java.lang.RuntimeException: takePicture failed
at android.hardware.Camera.native_takePicture(Native Method)
at android.hardware.Camera.takePicture(Camera.java:1266)
at android.hardware.Camera.takePicture(Camera.java:1211)
at com.gaming.fragment.GameOneStartFragment.snapPicture(GameOneStartFragment.java:76)
at com.gaming.fragment.GameOneStartFragment.surfaceCreated(GameOneStartFragment.java:284)
at android.view.SurfaceView.updateWindow(SurfaceView.java:572)
at android.view.SurfaceView.access$000(SurfaceView.java:86)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1897)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1019)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5725)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5086)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Но, когда я использую метод takePicture() объекта Camera внутри кнопки мыши его захвата изображения.
Как сделать снимок без просмотра нажмите?
В surfaceChanged метод я сделал это. –
Я думаю, что метод surfaceCreated никогда не вызывался, потому что вы не задавали отображение предварительного просмотра. – bvarga
Можем ли мы сделать снимок, не касаясь каких-либо видов? –