Android遊戲開發學習筆記(四):Camera圖像採集

一、爲相機添加權限。在AndroidManifest.xml文件的</application>之後,添加相機使用的權限:

  1. <uses-permission android:name="android.permission.CAMERA"/> 

二、編寫佈局文件main.xml,代碼如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent" 
  6.     > 
  7.     <SurfaceView 
  8.         android:id="@+id/surfaceView"    
  9.         android:layout_width="320px"   
  10.         android:layout_height="240px"   
  11.         /> 
  12.     <LinearLayout 
  13.         android:layout_width="fill_parent" 
  14.         android:layout_height="wrap_content"   
  15.         > 
  16.         <Button 
  17.             android:id="@+id/btn1" 
  18.             android:layout_width="wrap_content" 
  19.             android:layout_height="wrap_content" 
  20.             android:text="打開"   
  21.             /> 
  22.         <Button 
  23.             android:id="@+id/btn2" 
  24.             android:layout_width="wrap_content" 
  25.             android:layout_height="wrap_content" 
  26.             android:text="關閉" 
  27.             /> 
  28.     </LinearLayout> 
  29. </LinearLayout> 
三、編寫MainActivity.java代碼。
  1. package game.test;  
  2.  
  3. import android.app.Activity;  
  4. import android.hardware.Camera;  
  5. import android.os.Bundle;  
  6. import android.view.SurfaceHolder;  
  7. import android.view.SurfaceView;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.widget.Button;  
  11.  
  12. public class MainActivity extends Activity implements SurfaceHolder.Callback {  
  13.     Camera myCamera;  
  14.     SurfaceView mySurfaceView;  
  15.     SurfaceHolder mySurfaceHolder;  
  16.     Button btn1, btn2;  
  17.     boolean isPreview = false;  
  18.  
  19.     /** Called when the activity is first created. */ 
  20.     @Override 
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.main);  
  24.         mySurfaceView = (SurfaceView) findViewById(R.id.surfaceView);  
  25.         btn1 = (Button) findViewById(R.id.btn1);  
  26.         btn2 = (Button) findViewById(R.id.btn2);  
  27.         mySurfaceHolder = mySurfaceView.getHolder();  
  28.         mySurfaceHolder.addCallback(this);  
  29.         mySurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  30.         btn1.setOnClickListener(new OnClickListener() {  
  31.             @Override 
  32.             public void onClick(View v) {  
  33.                 initCamera();  
  34.             }  
  35.         });  
  36.         btn2.setOnClickListener(new OnClickListener() {  
  37.             @Override 
  38.             public void onClick(View v) {  
  39.                 if (myCamera != null && isPreview) {  
  40.                     myCamera.stopPreview();  
  41.                     myCamera.release();  
  42.                     myCamera = null;  
  43.                     isPreview = false;  
  44.                 }  
  45.             }  
  46.         });  
  47.     }  
  48.  
  49.     public void initCamera() {  
  50.         if (!isPreview) {  
  51.             myCamera = Camera.open();  
  52.         }  
  53.         if (myCamera != null && !isPreview) {  
  54.             try {  
  55.                 myCamera.setPreviewDisplay(mySurfaceHolder);  
  56.                 myCamera.startPreview();  
  57.             } catch (Exception e) {  
  58.                 e.printStackTrace();  
  59.             }  
  60.             isPreview = true;  
  61.         }  
  62.     }  
  63.  
  64.     @Override 
  65.     public void surfaceCreated(SurfaceHolder holder) {  
  66.         // TODO Auto-generated method stub  
  67.     }  
  68.  
  69.     @Override 
  70.     public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  71.             int height) {  
  72.         // TODO Auto-generated method stub  
  73.     }  
  74.  
  75.     @Override 
  76.     public void surfaceDestroyed(SurfaceHolder holder) {  
  77.         // TODO Auto-generated method stub  
  78.     }  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章