Я использую макет 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
не рисуется, пока все это не будет закончено.