Samsung s4 Zoom unterstützt kein flüssiges Zoomen isSmoothZoomSupported () == false
Ich habe versucht, ZoomIn / ZoomOut auf dem Gerät 's4 zoom' in meiner Kameraaufzeichnungsanwendung zu verarbeiten. Weil es nur regulären Zoom unterstützt, d.h.parameters.isZoomSupported()==true
, parameters.isSmoothZoomSupported()==false
, Ich habe benutztparameters.setZoom(mZoomVal);
mCamera.setParameters(parameters);
wie gewöhnlich. Das Problem ist, Zoom ist ruckelig, laut und nicht flüssig. Weiß jemand, wie man mit der Zoomgeschwindigkeit in 's4 zoom' umgeht, wie es in der Samsung-Kamera-App gemacht wurde?
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.v("onKeyDown keyCode="+keyCode+" event="+event.toString());
boolean handled = false;
switch(keyCode){
case KeyEvent.KEYCODE_FOCUS:
setAutoFocus();
handled = true;
break;
case KeyEvent.KEYCODE_CAMERA:
if(event.getRepeatCount() == 0){
if (isRec()) {
stopRec(1, 0);
} else {
startRec();
}
}
handled = true;
break;
case 256: //KeyEvent.KEYCODE_CAMERA_ZOOM_RING_MOVE:
handled = true;
break;
case 261: //KeyEvent.KEYCODE_CAMERA_ZOOM_RING_SPEED2
handled = true;
break;
case KeyEvent.KEYCODE_ZOOM_IN:
setZoomIn();
//AutoFocus();
handled = true;
break;
case KeyEvent.KEYCODE_ZOOM_OUT:
setZoomOut();
//AutoFocus();
handled = true;
break;
}
if(handled)
Log.v("onKeyDown HANDLED!");
else
return super.onKeyDown(keyCode, event);
return handled;
}
public int setZoomIn(){
if(mCamera == null){
return 0;
}
Parameters parameters = mCamera.getParameters();
List<Integer> zoom_list = parameters.getZoomRatios();
if(mZoomVal >= mZoomMax)
return zoom_list.get(mZoomMax);
/*
if(isAutoFocusing){
mCamera.cancelAutoFocus();
isAutoFocusing = false;
}*/
mZoomVal++;
isFocused = false;
parameters.setZoom(mZoomVal);
mCamera.setParameters(parameters);
mZoomVal = parameters.getZoom();
return zoom_list.get(mZoomVal);
}
public int setZoomOut(){
if(mCamera == null){
return 0;
}
Parameters parameters = mCamera.getParameters();
List<Integer> zoom_list = parameters.getZoomRatios();
if(mZoomVal <= 0)
return zoom_list.get(0);
/*
if(isAutoFocusing){
mCamera.cancelAutoFocus();
isAutoFocusing = false;
}*/
mZoomVal--;
isFocused = false;
parameters.setZoom(mZoomVal);
mCamera.setParameters(parameters);
mZoomVal = parameters.getZoom();
return zoom_list.get(mZoomVal);
}
public void setAutoFocus(){
if(mCamera == null){
return;
}
if(isFocused)
return;
if(isAutoFocusing){
mCamera.cancelAutoFocus();
isAutoFocusing = false;
}
isAutoFocusing = true;
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
Log.v("onAutoFocus success="+success);
isAutoFocusing = false;
isFocused = success;
}
});
}