2012-02-14 86 views
3

我知道相机功能getMaxZoom(),isZoomSupported()get/setZoom()。我可以使用这些功能,但在Surface-Camera-Preview中没有任何反应。我希望我的预览始于缩放,我使用Android 2.3.3。我忘了什么?ZoomView Camera-SurfaceView-Preview

代码是:

Camera.Parameters parameters = camera.getParameters(); 
if(parameters.isZoomSupported()) 
      { 
       int maxZoom= parameters.getMaxZoom(); 
       parameters.setZoom(maxZoom); 
       camera.setParameters(parameters); 
      } 

希望任何人有一个想法......

谢谢!

回答

2

你在用什么手机?我正在开发一款使用相机的应用程序,并且我测试的所有设备的行为都有所不同。如果你愿意,我可以发布一个测试应用程序。 http://www.mediafire.com/?laxtolevt57vax2

以下是我一直在使用的测试应用程序的链接。我做了很多改变,以便在多个手机上工作。它还远没有完美,但缩放工程。我已经在 三星Galaxy s2上测试过, Droid X, Droid Bionic, Droid 2, LG Ally。它不适用于HTC Sensation。 getMaxZoom()返回零。它也不能在HTC Incredible 2上运行。AutoFocusCallback永远不会执行,应用程序会挂起并锁定相机。

+0

请张贴您的代码.. – prakash 2014-08-20 14:29:58

+0

向下投票,因为答案应该具有无需跟随链接的解决方案。 BTW链接现在已经死了。 – 2017-09-04 08:48:49

5
import android.content.Context; 
import android.graphics.PixelFormat; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class CustomCameraView extends SurfaceView 
{ 
    Camera camera; 
    SurfaceHolder previewHolder; 

    public void zoom() 
    { 
     Parameters params=camera.getParameters(); 
     params.setZoom(params.getMaxZoom()); 
     camera.setParameters(params); 
    } 

    public void unzoom() 
    { 
     Parameters params=camera.getParameters(); 
     params.setZoom(0); 
     camera.setParameters(params); 
    } 

    public CustomCameraView(Context context) 
    { 
     super(context); 
     previewHolder=this.getHolder(); 
     previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     SurfaceHolder.Callback surfaceHolderListener=new SurfaceHolder.Callback() 
     { 
      public void surfaceCreated(SurfaceHolder holder) 
      { 
       camera=Camera.open(); 
       try{ 
        camera.setPreviewDisplay(previewHolder); 
       } 
       catch (Exception e) { 
       } 
      } 

      public void surfaceChanged(SurfaceHolder holder, int format, 
        int width, int height) { 
       Parameters params=camera.getParameters(); 
       params.setPreviewSize(width, height); 
       params.setPictureFormat(PixelFormat.JPEG); 

       //if you want the preview to be zoomed from start : 
       params.setZoom(params.getMaxZoom()); 

       camera.setParameters(params); 
       camera.startPreview(); 
      } 

      public void surfaceDestroyed(SurfaceHolder holder) { 
       camera.stopPreview(); 
       camera.release(); 
      } 
     }; 
     previewHolder.addCallback(surfaceHolderListener); 
    } 

} 
+0

即使参数parameters.isZoomSupported()返回false – 2012-05-03 19:09:16

6
if (params.isZoomSupported()) { 
    final int maxZoomLevel = params.getMaxZoom(); 
    Log.i("max ZOOM ", "is " + maxZoomLevel); 
    zoomControls.setIsZoomInEnabled(true); 
    zoomControls.setIsZoomOutEnabled(true); 

    zoomControls.setOnZoomInClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      if(currentZoomLevel < maxZoomLevel){ 
       currentZoomLevel++; 
       //mCamera.startSmoothZoom(currentZoomLevel); 
       params.setZoom(currentZoomLevel); 
       mCamera.setParameters(params); 
      } 
     } 
    }); 

    zoomControls.setOnZoomOutClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      if(currentZoomLevel > 0){ 
       currentZoomLevel--; 
       params.setZoom(currentZoomLevel); 
       mCamera.setParameters(params); 
      } 
     } 
    });  
} 
else 
    zoomControls.setVisibility(View.GONE);