case "iAuto":
preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
+ defaultAction = (isLongClick) ? ICameraFeatureDispatcher.FEATURE_LENS_ZOOMOUT_2X : ICameraFeatureDispatcher.FEATURE_LENS_ZOOMOUT;
break;
case "Movie":
case "iAuto":
preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_IAUTO;
+ defaultAction = (isLongClick) ? ICameraFeatureDispatcher.FEATURE_LENS_ZOOMIN_2X : ICameraFeatureDispatcher.FEATURE_LENS_ZOOMIN;
break;
case "Movie":
IOlyCameraConnection getConnectionInterface();
+ /** ズームレンズの状態ホルダを応答 **/
+ IZoomLensHolder getZoomLensHolder();
+
// デジタル水準器のホルダーを取得する
ILevelGauge getLevelGauge();
}
--- /dev/null
+package jp.sfjp.gokigen.a01c.olycamerawrapper;
+
+/**
+ * ズームレンズの状態
+ *
+ */
+
+public interface IZoomLensHolder
+{
+ boolean canZoom();
+ void updateStatus();
+ float getMaximumFocalLength();
+ float getMinimumFocalLength();
+ float getCurrentFocalLength();
+ void driveZoomLens(float targetLength);
+ void driveZoomLens(int direction);
+ boolean isDrivingZoomLens();
+
+}
private final OlyCameraConnection cameraConnection;
private final ICameraStatusDisplay cameraStatusDisplay;
private final LevelMeterHolder levelMeter;
+ private final ZoomLensHolder zoomLensHolder;
private boolean isManualFocus = false;
private boolean isAutoFocusLocked = false;
camera.setRecordingListener(new CameraRecordingListenerImpl(context, showInformation));
loadSaveCameraProperties = new LoadSaveCameraProperties(context, propertyProxy, this);
loadSaveOperations = new CameraPropertyLoadSaveOperations(context, loadSaveCameraProperties, cameraStatusDisplay);
+ zoomLensHolder = new ZoomLensHolder(camera);
}
/**
}
@Override
+ public IZoomLensHolder getZoomLensHolder()
+ {
+ return (zoomLensHolder);
+ }
+
+ @Override
public ILevelGauge getLevelGauge()
{
return (levelMeter);
--- /dev/null
+package jp.sfjp.gokigen.a01c.olycamerawrapper;
+
+import android.util.Log;
+
+import jp.co.olympus.camerakit.OLYCamera;
+
+/**
+ * ズームレンズの情報を保持する
+ *
+ */
+class ZoomLensHolder implements IZoomLensHolder
+{
+ private final String TAG = toString();
+ private boolean canZoom = false;
+ private float minimumLength = 0.0f;
+ private float maximumLength = 0.0f;
+ private float currentLength = 0.0f;
+ private final OLYCamera camera;
+
+ ZoomLensHolder(OLYCamera camera)
+ {
+ this.camera = camera;
+ //initialize();
+ }
+
+ private void initialize()
+ {
+ canZoom = false;
+ try
+ {
+ canZoom = ((camera != null) && (camera.getLensMountStatus()).contains("electriczoom"));
+ if (canZoom)
+ {
+ try
+ {
+ minimumLength = camera.getMinimumFocalLength();
+ maximumLength = camera.getMaximumFocalLength();
+ currentLength = camera.getActualFocalLength();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ catch (Exception ee)
+ {
+ ee.printStackTrace();
+ }
+ }
+
+ @Override
+ public boolean canZoom()
+ {
+ return (canZoom);
+ }
+
+ @Override
+ public void updateStatus()
+ {
+ initialize();
+ }
+
+ @Override
+ public float getMaximumFocalLength()
+ {
+ return (maximumLength);
+ }
+
+ @Override
+ public float getMinimumFocalLength()
+ {
+ return (minimumLength);
+ }
+
+ @Override
+ public float getCurrentFocalLength()
+ {
+ return (currentLength);
+ }
+
+ /**
+ * ズームレンズを動作させる
+ *
+ * @param targetLength 焦点距離
+ */
+ @Override
+ public void driveZoomLens(float targetLength)
+ {
+ try
+ {
+ // レンズがサポートする焦点距離と、現在の焦点距離を取得する
+ float targetFocalLength = targetLength;
+
+ // 焦点距離が最大値・最小値を超えないようにする
+ if (targetFocalLength > maximumLength)
+ {
+ targetFocalLength = maximumLength;
+ }
+ if (targetFocalLength < minimumLength)
+ {
+ targetFocalLength = minimumLength;
+ }
+
+ // レンズのスーム操作
+ Log.v(TAG, "ZOOM from " + currentLength + "mm to " + targetFocalLength + "mm");
+
+ // ズーム動作中でない時には、レンズをズームさせる
+ if (!camera.isDrivingZoomLens())
+ {
+ camera.startDrivingZoomLensToFocalLength(targetFocalLength);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * ズームレンズを動作させる
+ *
+ * @param direction (方向)
+ */
+ @Override
+ public void driveZoomLens(int direction)
+ {
+ float mag = Math.abs(direction);
+ driveZoomLens((direction < 0) ? (currentLength * (0.88f / mag)) : (currentLength * 1.15f * mag));
+ }
+
+ /**
+ * 現在ズーム中か確認する
+ *
+ * @return true : ズーム中 / false : ズーム中でない
+ */
+ @Override
+ public boolean isDrivingZoomLens()
+ {
+ return ((camera != null)&&(camera.isDrivingZoomLens()));
+ }
+
+}
import jp.sfjp.gokigen.a01c.R;
import jp.sfjp.gokigen.a01c.liveview.ILiveImageStatusNotify;
import jp.sfjp.gokigen.a01c.olycamerawrapper.IOlyCameraCoordinator;
+import jp.sfjp.gokigen.a01c.olycamerawrapper.IZoomLensHolder;
import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraProperty;
import jp.sfjp.gokigen.a01c.olycamerawrapper.property.IOlyCameraPropertyProvider;
import jp.sfjp.gokigen.a01c.olycamerawrapper.takepicture.IBracketingShotStyle;
showFavoriteDialog();
break;
+ case FEATURE_LENS_ZOOMIN:
+ // ズームイン(パワーズームレンズ装着時)
+ if (!driveZoomLens(1))
+ {
+ duration =IShowInformation.VIBRATE_PATTERN_NONE;
+ }
+ break;
+
+ case FEATURE_LENS_ZOOMOUT:
+ // ズームアウト(パワーズームレンズ装着時)
+ if (!driveZoomLens(-1))
+ {
+ duration =IShowInformation.VIBRATE_PATTERN_NONE;
+ }
+ break;
+
+ case FEATURE_LENS_ZOOMIN_2X:
+ // ズームイン(パワーズームレンズ装着時)
+ if (!driveZoomLens(2))
+ {
+ duration =IShowInformation.VIBRATE_PATTERN_NONE;
+ }
+ break;
+
+ case FEATURE_LENS_ZOOMOUT_2X:
+ // ズームアウト(パワーズームレンズ装着時)
+ if (!driveZoomLens(-2))
+ {
+ duration =IShowInformation.VIBRATE_PATTERN_NONE;
+ }
+ break;
+
default:
// 上記以外...なにもしない
duration =IShowInformation.VIBRATE_PATTERN_NONE;
}
/**
+ * ズームイン・ズームアウト操作を行う
+ *
+ * @param direction ズーム操作の方向
+ *
+ */
+ private boolean driveZoomLens(int direction)
+ {
+ boolean isExecute = false;
+ IZoomLensHolder zoom = camera.getZoomLensHolder();
+ if (zoom != null)
+ {
+ zoom.updateStatus();
+ if (zoom.canZoom())
+ {
+ // ズーム操作を行う
+ try
+ {
+ zoom.driveZoomLens(direction);
+ isExecute = true;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ return (isExecute);
+ }
+
+ /**
* 設定画面を開く
*
*/
int FEATURE_SHOT_BRACKET_ART_FILTER = 42;
int FEATURE_SHOT_BRACKET_ISO = 43;
int FEATURE_SHOW_FAVORITE_DIALOG = 44;
+ int FEATURE_LENS_ZOOMIN = 45;
+ int FEATURE_LENS_ZOOMOUT = 46;
+ int FEATURE_LENS_ZOOMIN_2X = 47;
+ int FEATURE_LENS_ZOOMOUT_2X = 48;
// エリアタッチ時の機能(featureNumber)
int FEATURE_AREA_ACTION_NONE = 100;
*/
private void updateButtonIcon(String takeMode)
{
- int btnResId;
- if (takeMode.equals("Movie"))
+ if (takeMode != null)
{
- btnResId = R.drawable.btn_videocam;
- }
- else
- {
- btnResId = R.drawable.btn_ic_camera_alt;
- }
- if (shutterButtonId != 0)
- {
- informationObject.setButtonDrawable(shutterButtonId, btnResId);
+ int btnResId;
+ if (takeMode.equals("Movie"))
+ {
+ btnResId = R.drawable.btn_videocam;
+ }
+ else
+ {
+ btnResId = R.drawable.btn_ic_camera_alt;
+ }
+ if (shutterButtonId != 0)
+ {
+ informationObject.setButtonDrawable(shutterButtonId, btnResId);
+ }
}
}