安卓Android实现摄像头对焦的三种方法

根据网上的资料有如下几种:

        1 极端人物的做法:  使用一个定时器,设定定时时间,然后不间断的对焦。代码和2雷同。

2.点击界面对焦。

预览view,添加单击事件:

  surfaceview.setOnClickListener(new ClickVideoListener());  
单机事件处理里,调动摄像头的自动对焦功能。

	class ClickVideoListener implements View.OnClickListener {  
		  
        @Override  
        public void onClick(View v) {  
        	if (m_camera!=null) {    
        		m_camera.autoFocus(new AutoFocusCallback() {
					
					@Override
					public void onAutoFocus(boolean success, Camera camera) {
						// TODO Auto-generated method stub
						  // TODO Auto-generated method stub
				        if (success) {
				            System.out.println(">>>>>>>>success");
				        }else{
				            camera.autoFocus(this);//如果失败,自动聚焦
				        }
					}
				});
            }
  
        }  
  
    }  
	
以上代码,就实现了点击界面预览视图,对焦功能。

        3  极客人物的做法:  那就是利用驱动层实现,但是这个一般人还是算了吧。

        4。 系统自动对焦。(代码摘自csdn博主:geekstart原地址

public class MainActivity extends Activity {  
  
    private SurfaceView surfaceView;  
    private SurfaceHolder surfaceHolder;  
    private boolean flag = false;  
    private String fileUrl="";  
    Camera camera;  
    Camera.Parameters parameters;  
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
      
  
      setContentView(R.layout.activity_main);  
      surfaceView =  (SurfaceView) findViewById(R.id.surfaceView1);  
      Button  button=(Button) findViewById(R.id.takepicture);  
      surfaceHolder =  surfaceView.getHolder();  
      surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
      surfaceHolder.setKeepScreenOn(true);  
      surfaceView.setFocusable(true);  
      surfaceView.setBackgroundColor(TRIM_MEMORY_BACKGROUND);  
      surfaceHolder.addCallback(new Callback() {  
      @Override  
        public void surfaceDestroyed(SurfaceHolder holder) {  
            // TODO Auto-generated method stub  
             camera.stopPreview();  
             camera.release();  
             camera=null;  
              
        }  
              
        @Override  
        public void surfaceCreated(SurfaceHolder holder) {  
            // TODO Auto-generated method stub  
            if(null==camera){  
                camera=Camera.open();  
            try {  
                      camera.setPreviewDisplay(surfaceHolder);  
                      initCamera();  
                      camera.startPreview();  
                } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
          }  
              
        }  
              
        @Override  
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){  
            //实现自动对焦  
            camera.autoFocus(new AutoFocusCallback() {  
                @Override  
                public void onAutoFocus(boolean success, Camera camera) {  
                    if(success){  
                        initCamera();//实现相机的参数初始化  
                        camera.cancelAutoFocus();//只有加上了这一句,才会自动对焦。  
                    }  
                }  
  
            });  
         }  
  
    });  
  }  
      //相机参数的初始化设置  
      private void initCamera()  
        {  
            parameters=camera.getParameters();  
            parameters.setPictureFormat(PixelFormat.JPEG);  
            //parameters.setPictureSize(surfaceView.getWidth(), surfaceView.getHeight());  // 部分定制手机,无法正常识别该方法。  
            parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);     
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);//1连续对焦  
            setDispaly(parameters,camera);  
            camera.setParameters(parameters);  
            camera.startPreview();  
            camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上  
              
        }  
        
      //控制图像的正确显示方向  
      private void setDispaly(Camera.Parameters parameters,Camera camera)  
      {  
          if (Integer.parseInt(Build.VERSION.SDK) >= 8){  
                setDisplayOrientation(camera,90);  
            }  
        else{  
                parameters.setRotation(90);  
            }  
            
      }       
      
      //实现的图像的正确显示  
      private void setDisplayOrientation(Camera camera, int i) {  
          Method downPolymorphic;  
         try{  
                downPolymorphic=camera.getClass().getMethod("setDisplayOrientation", new Class[]{int.class});  
                if(downPolymorphic!=null) {  
                    downPolymorphic.invoke(camera, new Object[]{i});  
                }  
            }  
            catch(Exception e){  
                Log.e("Came_e", "图像出错");  
            }  
      }  
     
  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.main, menu);  
          
        return true;  
    }  
      
     
     
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值