Zoom Camera in SurfaceView-Preview
Solution 1
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);
}
}
Solution 2
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);
Solution 3
What phone are you using? I'm developing an app that uses the camera and all the device's I've tested on behave differently. I can post a test app if you want. http://www.mediafire.com/?laxtolevt57vax2
Here is a link to a test app I've been working with. I've made many changes to make to work on multiple phones. It's still far from perfect, but zoom works. I've tested on
Samsung Galaxy s2,
Droid X,
Droid Bionic,
Droid 2,
LG Ally. It does not work on a HTC Sensation. getMaxZoom()
returns zero. It also doesn't work on the HTC Incredible 2. The AutoFocusCallback is never executed and the application hangs, and locks up the camera.
Tschakle
Updated on March 31, 2020Comments
-
Tschakle about 4 years
I know the camera functions
getMaxZoom()
,isZoomSupported()
orget/setZoom()
. I can use these functions but nothing happens in my Surface-Camera-Preview. I want that my preview starts in zoom all time.I use Android 2.3.3. Do I forget something?!Code is:
Camera.Parameters parameters = camera.getParameters(); if(parameters.isZoomSupported()) { int maxZoom= parameters.getMaxZoom(); parameters.setZoom(maxZoom); camera.setParameters(parameters); }
Hope anybody has an idea...
Thanks!
-
Aditya Pawade almost 12 yearsThe zoom worked even though The parameters.isZoomSupported() returned false
-
Ivar over 6 yearsDown-voted because answer should have solution without the need to follow links. BTW link is dead now.