У меня был успех со следующим подходом.
Сначала создайте XML-файл макета, который выглядит примерно так (обратите внимание на порядок двух видов):
OverlayView
является подклассом SurfaceView
с реализацией потоков чертежей и анимации. Другой SurfaceView будет поверхностью, обрабатывающей предварительный просмотр камеры. Внутри onCreate
вы должны настроить свои представления следующим образом:
mView = (OverlayView)this.findViewById(R.id.overlay);
mView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
mSurfaceView = (SurfaceView)this.findViewById(R.id.surface);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Вы должны добавить реализацию SurfaceHolder.Callback
в SurfaceHolder
из mView
, которая обрабатывает поток анимации. Пример реализации этого в подклассе и использование потоков анимации / рисования можно найти в примере старой LunarLander: http://developer.android.com/resources/samples/LunarLander/src/com/example/android /lunarlander/LunarView.html
Кроме того, вы создали камеру SurfaceView так же, как в этом примере: http://developer.android.com/resources/samples/ApiDemos /src/com/example/android/apis/graphics/CameraPreview.html