我知道相机功能getMaxZoom()
,isZoomSupported()
或get/setZoom()
。我可以使用这些功能,但我的Surface-Camera-Preview没有任何反应。我希望我的预览始终以缩放开始。我使用的是Android 2.3.3。我忘记了什么吗?!
代码是:
Camera.Parameters parameters = camera.getParameters();
if(parameters.isZoomSupported())
{
int maxZoom= parameters.getMaxZoom();
parameters.setZoom(maxZoom);
camera.setParameters(parameters);
}
希望有人有个主意......
谢谢!
答案 0 :(得分:6)
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);
}
}
答案 1 :(得分:4)
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);
答案 2 :(得分:2)
你用的是哪款手机?我正在开发一个使用相机的应用程序,我测试的所有设备的行为都不同。如果你愿意,我可以发布一个测试应用程序。 http://www.mediafire.com/?laxtolevt57vax2
这是我一直在使用的测试应用程序的链接。我做了很多改动,以便在多部手机上工作。它仍然远非完美,但缩放工作。我已经测试过了
三星Galaxy s2,
Droid X,
Droid Bionic,
机器人2,
LG Ally。它不适用于HTC Sensation。 getMaxZoom()
返回零。它也不适用于HTC Incredible 2.从不执行AutoFocusCallback并且应用程序挂起,并锁定相机。