package jp.sfjp.gokigen.a01c.liveview;
import android.content.Context;
-import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
-import android.media.ExifInterface;
+import androidx.exifinterface.media.ExifInterface;
+import androidx.preference.PreferenceDataStore;
+
import android.os.Looper;
-import android.preference.PreferenceManager;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import jp.co.olympus.camerakit.OLYCamera;
import jp.sfjp.gokigen.a01c.R;
+import jp.sfjp.gokigen.a01c.liveview.dialog.IDialogController;
+import jp.sfjp.gokigen.a01c.liveview.dialog.IDialogDrawer;
import jp.sfjp.gokigen.a01c.liveview.gridframe.GridFrameFactory;
import jp.sfjp.gokigen.a01c.liveview.gridframe.IGridFrameDrawer;
import jp.sfjp.gokigen.a01c.olycamerawrapper.ILevelGauge;
-import jp.sfjp.gokigen.a01c.preference.ICameraPropertyAccessor;
+import jp.sfjp.gokigen.a01c.preference.IPreferenceCameraPropertyAccessor;
+import jp.sfjp.gokigen.a01c.preference.PreferenceAccessWrapper;
/**
* CameraLiveImageView :
* (OLYMPUS の ImageCaptureSample をカスタマイズ)
*
*/
-public class CameraLiveImageView extends View implements CameraLiveViewListenerImpl.IImageDataReceiver, IAutoFocusFrameDisplay, ILiveImageStatusNotify
+public class CameraLiveImageView extends View implements CameraLiveViewListenerImpl.IImageDataReceiver, IAutoFocusFrameDisplay, ILiveImageStatusNotify, IDialogController
{
private final String TAG = toString();
private IGridFrameDrawer gridFrameDrawer = null;
private ShowMessageHolder messageHolder;
+ private IDialogDrawer dialogDrawer = null;
+ private PreferenceDataStore preferences = null;
+
/**
* コンストラクタ
*
messageHolder = new ShowMessageHolder();
imageScaleType = ImageView.ScaleType.FIT_CENTER;
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- showGridFeature = preferences.getBoolean(ICameraPropertyAccessor.SHOW_GRID_STATUS, true);
- showLevelGaugeFeature = preferences.getBoolean(ICameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false);
+ preferences = new PreferenceAccessWrapper(context);
+ showGridFeature = preferences.getBoolean(IPreferenceCameraPropertyAccessor.SHOW_GRID_STATUS, true);
+ showLevelGaugeFeature = preferences.getBoolean(IPreferenceCameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, false);
- int framingGridStatus = Integer.parseInt(preferences.getString(ICameraPropertyAccessor.FRAME_GRID, ICameraPropertyAccessor.FRAME_GRID_DEFAULT_VALUE));
+ int framingGridStatus = 0; // IPreferenceCameraPropertyAccessor.FRAME_GRID_DEFAULT_VALUE;
+ try
+ {
+ framingGridStatus = Integer.parseInt(preferences.getString(IPreferenceCameraPropertyAccessor.FRAME_GRID, IPreferenceCameraPropertyAccessor.FRAME_GRID_DEFAULT_VALUE));
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
gridFrameDrawer = GridFrameFactory.getGridFrameDrawer(framingGridStatus);
// ダミーのビットマップデータ読み込み...画面表示のテスト用ロジック
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
+ try
+ {
+ // 画像の表示
+ drawCanvas(canvas);
- // 画像の表示
- drawCanvas(canvas);
+ // ダイアログの表示
+ if (dialogDrawer != null)
+ {
+ dialogDrawer.drawDialog(canvas);
+ return;
+ }
- // メッセージの表示 (Overwrite)
- drawInformationMessages(canvas);
+ // メッセージの表示 (Overwrite)
+ drawInformationMessages(canvas);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
}
/**
// Acquire a rotation degree of image.
int orientation = ExifInterface.ORIENTATION_UNDEFINED;
- if (metadata.containsKey(EXIF_ORIENTATION))
+ try
{
- orientation = Integer.parseInt((String) metadata.get(EXIF_ORIENTATION));
+ if (metadata.containsKey(EXIF_ORIENTATION))
+ {
+ orientation = Integer.parseInt((String) metadata.get(EXIF_ORIENTATION));
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
}
switch (orientation)
{
- case ExifInterface.ORIENTATION_NORMAL:
- rotationDegrees = 0;
- break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotationDegrees = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotationDegrees = 270;
break;
+ case ExifInterface.ORIENTATION_NORMAL:
default:
rotationDegrees = 0;
break;
Paint framePaint = new Paint();
framePaint.setStyle(Paint.Style.STROKE);
+ framePaint.setAntiAlias(true);
//DisplayMetrics dm = getResources().getDisplayMetrics();
//float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1.0f, dm);
paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.CENTER));
paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.CENTER));
paint.setAntiAlias(true);
+ paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
float cx = (canvas.getWidth() / 2.0f) - (paint.measureText(message) / 2.0f);
float cy = (canvas.getHeight() / 2.0f) - ((fontMetrics.ascent + fontMetrics.descent) / 2.0f);
paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UPLEFT));
paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UPLEFT));
paintUp.setAntiAlias(true);
+ paintUp.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
Paint.FontMetrics fontMetrics = paintUp.getFontMetrics();
canvas.drawText(message, viewRect.left + 3.0f, viewRect.top + (fontMetrics.descent - fontMetrics.ascent), paintUp);
}
paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UPRIGHT));
paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UPRIGHT));
paintUp.setAntiAlias(true);
+ paintUp.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
float width = paintUp.measureText(message);
Paint.FontMetrics fontMetrics = paintUp.getFontMetrics();
canvas.drawText(message, (viewRect.right - 3.0f) - width, viewRect.top + (fontMetrics.descent - fontMetrics.ascent), paintUp);
paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOWLEFT));
paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOWLEFT));
paint.setAntiAlias(true);
+ paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
canvas.drawText(message, viewRect.left + 3.0f, viewRect.bottom - fontMetrics.bottom, paint);
}
paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOWRIGHT));
paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOWRIGHT));
paint.setAntiAlias(true);
+ paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
float width = paint.measureText(message);
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
canvas.drawText(message, (viewRect.right - 3.0f) - width, viewRect.bottom - fontMetrics.bottom, paint);
paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UPCENTER));
paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UPCENTER));
paintUp.setAntiAlias(true);
+ paintUp.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
float width = paintUp.measureText(message) / 2.0f;
Paint.FontMetrics fontMetrics = paintUp.getFontMetrics();
canvas.drawText(message, (viewRect.centerX()) - width, viewRect.top + (fontMetrics.descent - fontMetrics.ascent), paintUp);
paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOWCENTER));
paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOWCENTER));
paint.setAntiAlias(true);
+ paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
float width = paint.measureText(message) / 2.0f;
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
canvas.drawText(message, (viewRect.centerX()) - width, viewRect.bottom - fontMetrics.bottom, paint);
}
-/**/
+
+ // 画面中央左に表示する
+ message = messageHolder.getMessage(ShowMessageHolder.MessageArea.CENTERLEFT);
+ if ((message != null)&&(message.length() > 0))
+ {
+ Paint paint = new Paint();
+ paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.CENTERLEFT));
+ paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.CENTERLEFT));
+ paint.setAntiAlias(true);
+ paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
+ Paint.FontMetrics fontMetrics = paint.getFontMetrics();
+ float cy = (canvas.getHeight() / 2.0f) - ((fontMetrics.ascent + fontMetrics.descent) / 2.0f);
+ canvas.drawText(message, viewRect.left + 3.0f, cy, paint);
+ }
+
+ // 画面中央右に表示する
+ message = messageHolder.getMessage(ShowMessageHolder.MessageArea.CENTERRIGHT);
+ if ((message != null)&&(message.length() > 0))
+ {
+ Paint paint = new Paint();
+ paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.CENTERRIGHT));
+ paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.CENTERRIGHT));
+ paint.setAntiAlias(true);
+ paint.setShadowLayer(5.0f, 3.0f, 3.0f, Color.BLACK); // これで文字に影をつけたい
+ float width = paint.measureText(message);
+ Paint.FontMetrics fontMetrics = paint.getFontMetrics();
+ float cy = (canvas.getHeight() / 2.0f) - ((fontMetrics.ascent + fontMetrics.descent) / 2.0f);
+ canvas.drawText(message, (viewRect.right - 3.0f) - width, cy, paint);
+ }
+ /**/
}
/**
float ratioY = viewSizeHeight / imageSizeHeight;
float scale;
- switch (imageScaleType) {
+ switch (imageScaleType)
+ {
case FIT_XY:
viewPointX *= ratioX;
viewPointY *= ratioY;
public void setShowGridFrame(boolean isShowGridFeature)
{
showGridFeature = isShowGridFeature;
- SharedPreferences preferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(getContext());
- SharedPreferences.Editor editor = preferences.edit();
- editor.putBoolean(ICameraPropertyAccessor.SHOW_GRID_STATUS, showGridFeature);
- editor.apply();
+ try
+ {
+ preferences.putBoolean(IPreferenceCameraPropertyAccessor.SHOW_GRID_STATUS, showGridFeature);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
}
/**
{
Log.v(TAG, "setShowLevelGauge : " + isShowLevelGaugeFeature);
showLevelGaugeFeature = isShowLevelGaugeFeature;
- SharedPreferences preferences = android.support.v7.preference.PreferenceManager.getDefaultSharedPreferences(getContext());
- SharedPreferences.Editor editor = preferences.edit();
- editor.putBoolean(ICameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, showLevelGaugeFeature);
- editor.apply();
- ILevelGauge levelGauge = messageHolder.getLevelGauge();
- if (levelGauge == null)
+ try
{
- // デジタル水準器がとれない場合は、何もしない
- Log.v(TAG, "setShowLevelGauge : levelGauge is null.");
- return;
+ preferences.putBoolean(IPreferenceCameraPropertyAccessor.SHOW_LEVEL_GAUGE_STATUS, showLevelGaugeFeature);
+ ILevelGauge levelGauge = messageHolder.getLevelGauge();
+ if (levelGauge == null)
+ {
+ // デジタル水準器がとれない場合は、何もしない
+ Log.v(TAG, "setShowLevelGauge : levelGauge is null.");
+ return;
+ }
+ levelGauge.updateLevelGaugeChecking(isShowLevelGaugeFeature);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
}
- levelGauge.updateLevelGaugeChecking(isShowLevelGaugeFeature);
}
/**
{
return (messageHolder);
}
+
+ /**
+ *
+ *
+ */
+ @Override
+ public void showDialog(IDialogDrawer dialogDrawer)
+ {
+ this.dialogDrawer = dialogDrawer;
+ }
+
+ /**
+ *
+ *
+ */
+ @Override
+ public void hideDialog()
+ {
+ this.dialogDrawer = null;
+ System.gc();
+ }
+
+ /**
+ *
+ *
+ */
+ @Override
+ public boolean touchedPosition(float posX, float posY)
+ {
+ return ((dialogDrawer != null)&&(dialogDrawer.touchedPosition(posX, posY)));
+ }
}