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