2011-12-07 13 views
1

最初にコーディングを開始しましょう。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に解決策がありますが、もっと単純なものがあると思っていました。

ありがとうございます。

答えて

2

カメラの起動に時間がかかる - 外部プロセスが開始され、すべてがセットアップされます。私は推測すると、表面のコールバックはsetVisibility()から直接実行され、UIスレッドをブロックします。解決策はかなりシンプルです。新しいスレッドを生成してカメラのinitを実行するだけです。私のOCRのapplicatiosで

私は(onResumeでカメラを起動) - 私は常に働いプレビュー

を必要とするので、あなたは役に立つ私のOCRアンドロイドのデモを見つけることがあります。

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

オーバーレイで(カメラのプレビュー、 )

関連する問題