2014-01-07 2 views
0
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mTextureView = (TextureView) findViewById(R.id.textureView1); 
    mTextureView.setSurfaceTextureListener(this); 
    } 
@Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, 
     int height) { 
     mCamera = Camera.open(0); 

    try { 
     mCamera.setPreviewTexture(surface); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

    mCamera.startPreview(); 


} 

@Override 
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
    mCamera.stopPreview(); 
      mCamera.release(); 

    return false; 
} 

@Override 
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, 
     int height) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSurfaceTextureUpdated(SurfaceTexture surface) { 
    // TODO Auto-generated method stub 

} 

В настоящее время, когда я запускаю эту программу, камера запускается автоматически. как я могу запустить камеру на кнопку click.i, попробовав кнопку нажатием кнопки. но тогда на экране не было текстур. Пожалуйста, предложитеЗапуск камеры при нажатии кнопки в текстуре

+1

см https://github.com/dalinaum/TextureViewDemo/blob/master/src/kr/gdg/android/textureview/CameraActivity.java –

+0

я сделал это, но когда Я запускаю приложение, пространство, в котором необходимо выложить текстуру, остается пустым и на нажатой кнопке, которую он отображает. Можем ли мы показать черный экран, когда кнопка не будет нажата, как на поверхности? – Aswathy

ответ

0

Вы должны иметь как кнопки и TextureView в файле макет, как

Ваша камера автоматически звонит, потому что onSurfaceTextureAvailable будет называться как только ваш TextureView готовы. Поэтому вместо вызова каталога камеры вы можете настроить прослушиватель кнопок после того, как TextureView будет готов внутри onSurfaceTextureAvailable.

Это код фрагмента того же самого.

внутри main_layout.xml

<TextureView 
    android:id="@+id/ttv" 
    android:text="@string/hello_world" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" /> 

<Button 
    android:id="@+id/button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World" /> 

Теперь Внутри onCreate() или OnCreateView() {в случае фрагментов}

Получить как ваш Button и TextureView с помощью findViewById(...)

public class MainActivity extends ActionBarActivity implements TextureView.SurfaceTextureListener{ 

    TextureView tv; 
    Button b; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 

    tv = (TextureView) rootView.findViewById(R.id.ttv); 
    tv.setSurfaceTextureListener(this); 

    b = (Button) rootView.findViewById(R.id.button); 

    } 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 

    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 

     final SurfaceTexture surfaceT = surface; 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mCamera = Camera.open(0); 

       try { 
        mCamera.setPreviewTexture(surfaceT); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       mCamera.startPreview(); 
      } 
     }); 


    } 

    @Override 
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 

    } 

    @Override 
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
     mCamera.stopPreview(); 
     mCamera.release(); 

     return false; 
    } 

    @Override 
    public void onSurfaceTextureUpdated(SurfaceTexture surface) { 

    } 
} 

Не Забудьте добавить эти камеры Permi ssion и особенность в вашем файле манифеста:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 
Смежные вопросы