Сообщение при запуске предварительного просмотра камеры на SurfaceView на Android - PullRequest
1 голос
/ 07 декабря 2011

Позвольте мне сначала начать с кодирования.Мой 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 видимым и устанавливаю для него текст.Когда начинается предварительный просмотр, я просто скрываю это.Ну, это не работает так: когда я нажимаю кнопку, чтобы запустить предварительный просмотр камеры, поток пользовательского интерфейса останавливается в ожидании предварительного просмотра, и мое сообщение о состоянии не отображается.Как я могу это исправить?Есть решение по адресу ЗДЕСЬ , но я подумал, что, возможно, есть более простое.

Спасибо, что уделили время.

1 Ответ

2 голосов
/ 07 декабря 2011

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

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

Вы можете найти полезные демоверсии OCR для Android:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...