Непоследовательные результаты с использованием XML-макета и SurfaceView - PullRequest
1 голос
/ 06 февраля 2012

Я использую макет XML, чтобы показать пользовательский класс, который расширяет SurfaceView вместе с единственной кнопкой справа от него, используя приведенный ниже код XML:

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">

    <com.my.name.MySurfaceView android:id="@+id/camera_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button android:id="@+id/button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/button_text"/>

</LinearLayout>

Затем я использую следующий код, чтобы установить макет для моей деятельности:

MyActivity.java

public class MyActivity extends Activity {

    private MySurfaceView mySurfaceView;
    private Button button;

    public MyActivity() {

    }

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

        mySurfaceView = (MySurfaceView) findViewById(R.id.camera_view);

        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new android.view.View.OnClickListener() {
            public void onClick(View v) {
                mySurfaceView.setClick(true);
            }
        });
    }
}

Класс MySurfaceView затем расширяет SurfaceView и настраивается для отображения потока камеры.

Проблема в том, что при запуске приложения часто возникают разные результаты. Или:

Обе Button и MySurfaceView одновременно выводятся на экран, затем начинает отображаться поток с камеры (так я бы хотел, чтобы он работал каждый раз)

или

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

Я понимаю, что SurfaceView необходимо создать, измерить и т. Д., Прежде чем можно будет отобразить кнопку, поэтому следует ожидать небольшой задержки, но, как уже упоминалось выше, в некоторых случаях SurfaceView отображает поток с камеры до За 5 секунд до того, как кнопка будет в конечном итоге выведена на экран.

Как мне этого избежать?

Заранее спасибо за помощь.

РЕДАКТИРОВАТЬ:

Кажется, что SurfaceView не завершено создание, несмотря на то, что отображается на экране. Я использую OpenCV для обработки потока камеры, и кажется, что он все еще инициализирует вещи после первоначального рисования SurfaceView, и поэтому Button не рисуется, пока все это не будет закончено.

...