所以我在Google Glass上成功实现了自己的缩放功能,因为目前谷歌没有添加此功能。它看起来像这样:
@Override
public boolean onFling( MotionEvent e1, MotionEvent e2, float velocityX, float velocityY )
{
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFpsRange(30000, 30000);
int zoom = parameters.getZoom();
if ( velocityX < 0.0f )
{
zoom -= 10;
if ( zoom < 0 )
zoom = 0;
}
else if ( velocityX > 0.0f )
{
zoom += 10;
if ( zoom > parameters.getMaxZoom() )
zoom = parameters.getMaxZoom();
}
mCamera.startSmoothZoom(zoom);
return false;
}
然后我检测表面是否发生变化并调用预览功能来更新屏幕上的预览:
private void initPreview(int width, int height)
{
if ( mCamera != null && mPreviewHolder.getSurface() != null) {
try
{
mCamera.setPreviewDisplay(mPreviewHolder);
}
catch (Throwable t)
{
Log.e(TAG, "Exception in initPreview()", t);
Toast.makeText(CameraZoom.this, t.getMessage(), Toast.LENGTH_LONG).show();
}
if ( !mCameraConfigured )
{
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFpsRange(30000, 30000);
parameters.setPreviewSize(1920, 1080); // hard coded the largest size for now
mCamera.setParameters(parameters);
mCamera.enableShutterSound(true);
mCamera.setZoomChangeListener(this);
mCameraConfigured = true;
}
}
}
问题在于,当我调用相机拍摄照片时,会拍摄预览图片,该图片位于预览所在的位置。高度没有设置为预览参数或我不确定的东西。这是捕获的调用:
public void onClick(View v)
{
mCamera.takePicture(null, null, capturedIt);
}
和captureIt只是一个PictureCallback。因此总之,预览中的图像不是摄像机捕获的图像。任何帮助将非常感激。