Сообщение при запуске предварительного просмотра камеры на SurfaceView на Android

1

Позвольте мне сначала начать кодирование. Мой XML файл (соответствующая его часть) содержит следующее:

<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#ffffff">


        <SurfaceView
            android:id="@+id/cameraView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:visibility="gone" />

        <LinearLayout
            android:id="@+id/layStatus"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:visibility="gone">

            <TextView
                android:id="@+id/txtStatus"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#90000000"
                android:paddingBottom="5dip"
                android:paddingTop="5dip"
                android:gravity="center_vertical|center_horizontal"
                android:textSize="20dip" />
        </LinearLayout>
</FrameLayout>

Как вы можете видеть, у меня есть базовая настройка, макет фрейма, который содержит обзор поверхности (который имеет видимость, установленный для удаления) и другой макет с простым TextView. Вот что я имею в своей деятельности:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);

        cameraView = (SurfaceView)findViewById(R.id.cameraView);

        surfaceHolder = cameraView.getHolder();
        surfaceHolder.addCallback(CompassActivity.this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void btnCameraOnClick(View target) {

    cameraView.setVisibility(View.VISIBLE);

    }

Запуск предварительного просмотра камеры выполняется в Поверхности, которая срабатывает при изменении видимости поверхности.

@Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            txtStatus.setVisibility(View.Visible);
            txtStatus.setText("Starting camera");
camera = Camera.open();
if (camera != null){
                try {

                    camera.setDisplayOrientation(90);
                    Camera.Parameters parameters = camera.getParameters();

                    List<Size> sizes = parameters.getSupportedPreviewSizes();
                    Size size = sizes.get(0);
                    parameters.setPreviewSize(size.width, size.height);

                    camera.setParameters(parameters);

                    camera.setPreviewDisplay(holder);
                    camera.startPreview();

                     txtStatis.setVisibility(View.GONE);
                } catch (IOException e) {
                }
            }
}

Так в чем проблема? Я хочу просто отобразить текст во время предварительного просмотра камеры. Чтобы сделать это, я делаю txtStatus видимым и устанавливаю для него текст. Когда предварительный просмотр запущен, я просто спрячу его. Ну, это не работает. Когда я нажимаю кнопку, чтобы начать предварительный просмотр камеры, поток пользовательского интерфейса зависает в ожидании предварительного просмотра, и мое сообщение о статусе не отображается. Как я могу это исправить? Есть решение в ЗДЕСЬ, но я думал, что, возможно, есть более простой.

Спасибо за ваше время.

Теги:
surfaceview
android-camera

1 ответ

2
Лучший ответ

Запуск камеры занимает некоторое время - внешний процесс запускается и все настраивается. Я бы предположил, что поверхностный измененный обратный вызов выполняется непосредственно из setVisibility() и блокирует поток пользовательского интерфейса. Решение довольно простое - просто создайте новую ветку и запустите камеру.

В моих приложениях OCR я запускаю камеру в onResume() - так как мне всегда нужен предварительный просмотр

Вы можете найти мои демонстрации OCR android полезными:

http://sourceforge.net/projects/javaocr/

(предварительный просмотр камеры с оверлеями)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню