最初にコーディングを開始しましょう。AndroidのSurfaceViewでカメラプレビューを開始中のメッセージ
<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>
あなたは私が基本的なセットアップ、(視界がなくなっに設定されている)surfaceviewが含まれているフレームレイアウトを持って見ることができるようにと別: 私のxmlファイル(その関連部分)は、この含まれてい単純な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を可視にし、それにテキストを設定します。プレビューが開始されると、単にプレビューを非表示にします。うーん、このようには動作しません。カメラのプレビューを開始するためにボタンを押すと、UIスレッドがプレビューを待ってフリーズし、ステータスメッセージが表示されません。どうすれば修正できますか? HEREに解決策がありますが、もっと単純なものがあると思っていました。
ありがとうございます。