2015-04-07 33 views
1

我尝试在表面上显示相机预览。但它只是显示黑色表面。我该怎么办 ?我把下面 感谢代码的帮助为什么相机预览不起作用


import android.graphics.PixelFormat; 
import android.hardware.Camera; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

import java.io.IOException; 


public class MainActivity extends ActionBarActivity implements SurfaceHolder.Callback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     getWindow().setFormat(PixelFormat.UNKNOWN); 
     SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView); 
     SurfaceHolder surfaceHolder = surfaceView.getHolder(); 
     surfaceHolder.addCallback(this); 
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     Camera camera = Camera.open(); 
     try { 
      camera.setPreviewDisplay(surfaceHolder); 
      camera.startPreview(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 

    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 

    } 
} 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 
    <SurfaceView 
     android:id="@+id/surfaceView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</RelativeLayout> 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="test.frontcamerateststartup" > 
    <uses-permission android:name="android.permission.CAMERA"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

.................. .................................................. .................................................. .................................................. ...

回答

2

把下面的代码在surfaceCreated()

try { 
     camera.setPreviewDisplay(surfaceHolder); 
     camera.startPreview(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

表面需要是使用

之前设置