龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 移动开发 > Android开发 >

Android上使用ZXing识别条形码与二维码的方法(2)

时间:2014-08-10 02:25来源:网络整理 作者:网络 点击:
分享到:
SFHCamera.java是Camera控制类,源码如下: package com.testCamera;import java.io.IOException;import android.graphics.PixelFormat;import android.hardware.Camera;import android.util.Log;import a

SFHCamera.java是Camera控制类,源码如下:

package com.testCamera;
import java.io.IOException;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.util.Log;
import android.view.SurfaceHolder;
public class SFHCamera implements SurfaceHolder.Callback{
 private SurfaceHolder holder = null;
 private Camera mCamera;
  private int width,height;
  private Camera.PreviewCallback previewCallback;
 public SFHCamera(SurfaceHolder holder,int w,int h,Camera.PreviewCallback previewCallback) {
 this.holder = holder; 
 this.holder.addCallback(this); 
 this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    width=w;
    height=h;
    this.previewCallback=previewCallback;
 }
 @Override
 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
 Camera.Parameters parameters = mCamera.getParameters(); 
    parameters.setPreviewSize(width, height);//设置尺寸 
    parameters.setPictureFormat(PixelFormat.JPEG);
    mCamera.setParameters(parameters); 
    mCamera.startPreview();//开始预览
    Log.e("Camera","surfaceChanged");
 }
 @Override
 public void surfaceCreated(SurfaceHolder arg0) {
 mCamera = Camera.open();//启动服务 
    try { 
      mCamera.setPreviewDisplay(holder);//设置预览 
      Log.e("Camera","surfaceCreated");
    } catch (IOException e) { 
      mCamera.release();//释放 
      mCamera = null; 
    }
 }
 @Override
 public void surfaceDestroyed(SurfaceHolder arg0) {
 mCamera.setPreviewCallback(null);
 mCamera.stopPreview();//停止预览 
    mCamera = null;
    Log.e("Camera","surfaceDestroyed");
 }
 /**
 * 自动对焦并回调Camera.PreviewCallback
 */
 public void AutoFocusAndPreviewCallback()
 {
 if(mCamera!=null)
  mCamera.autoFocus(mAutoFocusCallBack);
 }
 /**
   * 自动对焦
   */
  private Camera.AutoFocusCallback mAutoFocusCallBack = new Camera.AutoFocusCallback() { 
    @Override 
    public void onAutoFocus(boolean success, Camera camera) {   
      if (success) { //对焦成功,回调Camera.PreviewCallback
       mCamera.setOneShotPreviewCallback(previewCallback); 
      } 
    } 
  };
}

其中testCamera.java的Camera.PreviewCallback previewCallback 是整个程序的逻辑核心,作为回调函数给SFHCamera.java的内部Camera类调用。

希望本文实例对大家学习Android程序设计能有所帮助。

精彩图集

赞助商链接