OSDN Git Service

表示エリアを拡張、Pモードでピクチャーモード変更の機能を搭載。
authorMRSa <mrsa@myad.jp>
Thu, 16 Mar 2017 15:39:04 +0000 (00:39 +0900)
committerMRSa <mrsa@myad.jp>
Thu, 16 Mar 2017 15:39:04 +0000 (00:39 +0900)
app/src/main/java/jp/sfjp/gokigen/a01c/IShowInformation.java
app/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java
app/src/main/java/jp/sfjp/gokigen/a01c/liveview/CameraLiveImageView.java
app/src/main/java/jp/sfjp/gokigen/a01c/liveview/ICameraFeatureDispatcher.java
app/src/main/java/jp/sfjp/gokigen/a01c/liveview/IMessageDrawer.java
app/src/main/java/jp/sfjp/gokigen/a01c/liveview/OlyCameraLiveViewOnTouchListener.java
app/src/main/java/jp/sfjp/gokigen/a01c/liveview/ShowMessageHolder.java

index 4300ce7..dbd5850 100644 (file)
@@ -12,6 +12,8 @@ public interface IShowInformation
     int AREA_4 = 4;
     int AREA_5 = 5;
     int AREA_6 = 6;
+    int AREA_7 = 7;
+    int AREA_8 = 8;
 
     int BUTTON_1 = 1;
     int BUTTON_2 = 2;
index a61d050..7fd572f 100644 (file)
@@ -339,19 +339,29 @@ public class MainActivity extends WearableActivity implements  IChangeScene, ISh
         }
         if (messageDrawer != null)
         {
+            if (area == IShowInformation.AREA_C)
+            {
+                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.CENTER, color, IMessageDrawer.SIZE_LARGE, message);
+                return;
+            }
             if (area == IShowInformation.AREA_5)
             {
-                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.UP, color, IMessageDrawer.SIZE_STD, message);
+                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.UPLEFT, color, IMessageDrawer.SIZE_STD, message);
                 return;
             }
             if (area == IShowInformation.AREA_6)
             {
-                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.LOW, color, IMessageDrawer.SIZE_STD, message);
+                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.LOWLEFT, color, IMessageDrawer.SIZE_STD, message);
                 return;
             }
-            if (area == IShowInformation.AREA_C)
+            if (area == IShowInformation.AREA_7)
             {
-                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.CENTER, color, IMessageDrawer.SIZE_LARGE, message);
+                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.UPRIGHT, color, IMessageDrawer.SIZE_STD, message);
+                return;
+            }
+            if (area == IShowInformation.AREA_8)
+            {
+                messageDrawer.setMessageToShow(IMessageDrawer.MessageArea.LOWRIGHT, color, IMessageDrawer.SIZE_STD, message);
                 return;
             }
             if (id == 0)
index 29d2b35..f0107b4 100644 (file)
@@ -57,7 +57,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
 
 
     /**
-     *
+     *   コンストラクタ
      *
      */
     public CameraLiveImageView(Context context)
@@ -67,7 +67,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
     }
 
     /**
-     *
+     *   コンストラクタ
      *
      */
     public CameraLiveImageView(Context context, AttributeSet attrs)
@@ -77,7 +77,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
     }
 
     /**
-     *
+     *   コンストラクタ
      *
      */
     public CameraLiveImageView(Context context, AttributeSet attrs, int defStyleAttr)
@@ -366,8 +366,7 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
         Bitmap bitmapToShow = imageBitmap;
         if (bitmapToShow == null)
         {
-            // 表示するビットマップがないときは、メッセージ表示のみ行う
-            drawInformationMessages(canvas);
+            // 表示するビットマップがないとき
             return;
         }
 
@@ -379,13 +378,16 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
         RectF viewRect = null;
 
         //  Calculate the viewport of bitmap.
-        if (imageScaleType == ImageView.ScaleType.FIT_CENTER) {
-            viewRect = decideViewRect(canvas, bitmapToShow);
+        if (imageScaleType == ImageView.ScaleType.FIT_CENTER)
+        {
+            viewRect = decideViewRect(canvas, bitmapToShow, imageRotationDegrees);
 
             // Draws the bitmap.
             Rect imageRect = new Rect(0, 0, bitmapToShow.getWidth(), bitmapToShow.getHeight());
             canvas.drawBitmap(bitmapToShow, imageRect, viewRect, null);
-        } else {
+        }
+        else
+        {
             // Sorry, other scale types are not supported.
             Log.v(TAG, "Sorry, other scale types are not supported. " + imageScaleType);
         }
@@ -404,7 +406,8 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
         }
 
         // グリッド(撮影補助線)の表示
-        if ((viewRect != null) && (showGridFeature) && (gridFrameDrawer != null)) {
+        if ((viewRect != null) && (showGridFeature) && (gridFrameDrawer != null))
+        {
             drawGridFrame(canvas, viewRect);
         }
     }
@@ -413,14 +416,17 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
      *
      *
      */
-    private RectF decideViewRect(Canvas canvas, Bitmap bitmapToShow)
+    private RectF decideViewRect(Canvas canvas, Bitmap bitmapToShow, int degree)
     {
         final int srcWidth;
         final int srcHeight;
-        if ((imageRotationDegrees == 0) || (imageRotationDegrees == 180)) {
+        if ((degree == 0) || (degree == 180))
+        {
             srcWidth = bitmapToShow.getWidth();
             srcHeight = bitmapToShow.getHeight();
-        } else {
+        }
+        else
+        {
             // Replaces width and height.
             srcWidth = bitmapToShow.getHeight();
             srcHeight = bitmapToShow.getWidth();
@@ -438,11 +444,14 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
 
         final int dstWidth;
         final int dstHeight;
-        if (widthRatio < heightRatio) {
+        if (widthRatio < heightRatio)
+        {
             // Fits to maxWidth with keeping aspect ratio.
             dstWidth = maxWidth;
             dstHeight = (int) (smallRatio * srcHeight);
-        } else {
+        }
+        else
+        {
             // Fits to maxHeight with keeping aspect ratio.
             dstHeight = maxHeight;
             dstWidth = (int) (smallRatio * srcWidth);
@@ -450,7 +459,8 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
 
         final float halfWidth = dstWidth * 0.5f;
         final float halfHeight = dstHeight * 0.5f;
-        if ((imageRotationDegrees == 0) || (imageRotationDegrees == 180)) {
+        if ((degree == 0) || (degree == 180))
+        {
             return (new RectF(
                     centerX - halfWidth,
                     centerY - halfHeight,
@@ -543,8 +553,17 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
     private void drawInformationMessages(Canvas canvas)
     {
         String message;
-        float x = 10.0f;  // 表示マージン ... 実測なのでチューニング必要
-        float y = 55.0f;  // 表示マージン ... 実測なのでチューニング必要
+        RectF viewRect;
+        if (imageBitmap != null)
+        {
+            // ビットマップの表示エリアに合わせて位置をチューニングする
+            viewRect = decideViewRect(canvas, imageBitmap, 0);
+        }
+        else
+        {
+            // 適当なサイズ...
+            viewRect = new RectF(5.0f, 0.0f, canvas.getWidth() - 5.0f, canvas.getHeight() - 55.0f);
+        }
 
         // 画面の中心に表示する
         message = messageHolder.getMessage(ShowMessageHolder.MessageArea.CENTER);
@@ -559,26 +578,25 @@ public class CameraLiveImageView extends View implements CameraLiveViewListenerI
             canvas.drawText(message, cx, cy, paint);
         }
 
-        // 画面上部に表示する
-        message = messageHolder.getMessage(ShowMessageHolder.MessageArea.UP);
+        // 画面上部右側に表示する
+        message = messageHolder.getMessage(ShowMessageHolder.MessageArea.UPLEFT);
         if ((message != null)&&(message.length() > 0))
         {
             Paint paintUp = new Paint();
-            paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UP));
-            paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UP));
-            canvas.drawText(message, x, y, paintUp);
+            paintUp.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.UPLEFT));
+            paintUp.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.UPLEFT));
+            canvas.drawText(message, viewRect.left, viewRect.top, paintUp);
         }
 
-        // 画面下部に表示する
-        message = messageHolder.getMessage(ShowMessageHolder.MessageArea.LOW);
+        // 画面下部右側に表示する
+        message = messageHolder.getMessage(ShowMessageHolder.MessageArea.LOWLEFT);
         if ((message != null)&&(message.length() > 0))
         {
             Paint paint = new Paint();
-            paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOW));
-            paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOW));
+            paint.setColor(messageHolder.getColor(ShowMessageHolder.MessageArea.LOWLEFT));
+            paint.setTextSize(messageHolder.getSize(ShowMessageHolder.MessageArea.LOWLEFT));
             Paint.FontMetrics fontMetrics = paint.getFontMetrics();
-            y = canvas.getHeight() - (fontMetrics.ascent + fontMetrics.descent) - y;
-            canvas.drawText(message, x, y, paint);
+            canvas.drawText(message, viewRect.left + 3.0f, viewRect.bottom - fontMetrics.bottom, paint);
         }
     }
 
index 2c84e8f..976f3b4 100644 (file)
@@ -37,6 +37,7 @@ public interface ICameraFeatureDispatcher
     String DRAWABLE_BUTTON6 = "D6";
 
     // 表示エリア
+    String SHOW_TEXT_AREAC = "TXTC";
     String SHOW_TEXT_AREA1 = "TXT1";
     String SHOW_TEXT_AREA2 = "TXT2";
     String SHOW_TEXT_AREA3 = "TXT3";
@@ -44,6 +45,7 @@ public interface ICameraFeatureDispatcher
     String SHOW_TEXT_AREA5 = "TXT5";
     String SHOW_TEXT_AREA6 = "TXT6";
     String SHOW_TEXT_AREA7 = "TXT7";
+    String SHOW_TEXT_AREA8 = "TXT8";
 
 
     // A01Cが持つ機能 (ボタンに割り当て可能)
@@ -59,5 +61,7 @@ public interface ICameraFeatureDispatcher
     int FEATURE_APERTURE_UP = 9;
     int FEATURE_SHUTTER_SPEED_DOWN = 10;
     int FEATURE_SHUTTER_SPEED_UP = 11;
+    int FEATURE_COLORTONE_DOWN = 12;
+    int FEATURE_COLORTONE_UP = 13;
 
 }
index ef230c7..d86c958 100644 (file)
@@ -6,9 +6,11 @@ public interface IMessageDrawer
     // メッセージを表示する位置
     enum MessageArea
     {
-        UP,
+        UPLEFT,
+        UPRIGHT,
         CENTER,
-        LOW
+        LOWLEFT,
+        LOWRIGHT
     };
 
     int SIZE_STD = 16;
index 9abe462..c285481 100644 (file)
@@ -204,6 +204,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         {
             case "P":
                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
+                defaultAction = ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN;
                 break;
 
             case "A":
@@ -252,6 +253,7 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         {
             case "P":
                 preference_action_id = preference_action_id + ICameraFeatureDispatcher.MODE_P;
+                defaultAction = ICameraFeatureDispatcher.FEATURE_COLORTONE_UP;
                 break;
 
             case "A":
@@ -744,6 +746,26 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
         propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.SHUTTER_SPEED);
     }
 
+
+    /**
+     *   仕上がり・ピクチャーモードを1段階下げる
+     */
+    private void changeColorToneDown()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyDown(IOlyCameraProperty.COLOR_TONE);
+    }
+
+    /**
+     *   仕上がり・ピクチャーモードを1段階あげる
+     *
+     */
+    private void changeColorToneUp()
+    {
+        IOlyCameraPropertyProvider propertyProxy = camera.getCameraPropertyProvider();
+        propertyProxy.updateCameraPropertyUp(IOlyCameraProperty.COLOR_TONE);
+    }
+
     /**
      *   設定画面を開く
      *
@@ -814,6 +836,15 @@ public class OlyCameraLiveViewOnTouchListener  implements View.OnClickListener,
                 // シャッター速度を1段階上げる
                 changeShutterSpeedUp();
                 break;
+            case ICameraFeatureDispatcher.FEATURE_COLORTONE_DOWN:
+                // 仕上がり・ピクチャーモードを選択
+                changeColorToneDown();
+                break;
+            case ICameraFeatureDispatcher.FEATURE_COLORTONE_UP:
+                // 仕上がり・ピクチャーモードを選択
+                changeColorToneUp();
+                break;
+
         }
     }
 }
index 56e4f75..85e0ba8 100644 (file)
@@ -9,96 +9,125 @@ import android.graphics.Color;
  */
 class ShowMessageHolder implements IMessageDrawer
 {
-    private String upperMessage = "";
-    private String centerMessage = "";
-    private String lowerMessage = "";
-
-    private int upperMessageColor = Color.BLUE;
-    private int centerMessageColor = Color.BLUE;
-    private int lowerMessageColor = Color.BLUE;
-
-    private int upperMessageTextSize = 16;
-    private int centerMessageTextSize = 24;
-    private int lowerMessageTextSize = 16;
-
     /**
      *
-     *
      */
-    @Override
-    public void setMessageToShow(MessageArea area, int color, int size, String message)
+    private class messageHolder
     {
-        switch (area)
+        private String message = "";
+        private int color = Color.BLUE;
+        private int textSize = 16;
+
+        String getMessage()
         {
-            case CENTER:
-                centerMessageColor = color;
-                centerMessageTextSize = size;
-                centerMessage = message;
-                break;
+            return message;
+        }
 
-            case UP:
-                upperMessageColor = color;
-                upperMessageTextSize = size;
-                upperMessage = message;
-                break;
+        void setMessage(String message)
+        {
+            this.message = message;
+        }
 
-            case LOW:
-            default:
-                lowerMessageColor = color;
-                lowerMessageTextSize = size;
-                lowerMessage = message;
-                break;
+        int getColor()
+        {
+            return color;
         }
+
+        void setColor(int color)
+        {
+            this.color = color;
+        }
+
+        int getTextSize()
+        {
+            return textSize;
+        }
+
+        void setTextSize(int textSize)
+        {
+            this.textSize = textSize;
+        }
+    }
+
+    private messageHolder upperLeft = new messageHolder();
+    private messageHolder upperRight = new messageHolder();
+    private messageHolder center = new messageHolder();
+    private messageHolder lowerLeft = new messageHolder();
+    private messageHolder lowerRight = new messageHolder();
+
+    /**
+     *   コンストラクタ
+     *
+     */
+    ShowMessageHolder()
+    {
+        center.setTextSize(24);
     }
 
     /**
      *
      *
      */
-    int getSize(MessageArea area)
+    private messageHolder decideHolder(MessageArea area)
     {
-        int size;
+        messageHolder target;
         switch (area)
         {
             case CENTER:
-                size = centerMessageTextSize;
+                target = center;
+                break;
+
+            case UPLEFT:
+                target = upperLeft;
                 break;
 
-            case UP:
-                size = upperMessageTextSize;
+            case UPRIGHT:
+                target = upperRight;
                 break;
 
-            case LOW:
+            case LOWLEFT:
+                target = lowerLeft;
+                break;
+
+            case LOWRIGHT:
             default:
-                size = lowerMessageTextSize;
+                target = lowerRight;
                 break;
         }
-        return (size);
+        return (target);
     }
 
     /**
      *
      *
      */
-    int getColor(MessageArea area)
+    @Override
+    public void setMessageToShow(MessageArea area, int color, int size, String message)
     {
-        int color;
-        switch (area)
-        {
-            case CENTER:
-                color = centerMessageColor;
-                break;
+        messageHolder target = decideHolder(area);
+        target.setColor(color);
+        target.setTextSize(size);
+        target.setMessage(message);
+    }
 
-            case UP:
-                color = upperMessageColor;
-                break;
+    /**
+     *
+     *
+     */
+    int getSize(MessageArea area)
+    {
+        messageHolder target = decideHolder(area);
+        return (target.getTextSize());
+    }
 
-            case LOW:
-            default:
-                color = lowerMessageColor;
-                break;
-        }
-        return (color);
+    /**
+     *
+     *
+     */
+    int getColor(MessageArea area)
+    {
+        messageHolder target = decideHolder(area);
+        return (target.getColor());
     }
 
     /**
@@ -107,22 +136,7 @@ class ShowMessageHolder implements IMessageDrawer
      */
     String getMessage(MessageArea area)
     {
-        String message;
-        switch (area)
-        {
-            case CENTER:
-                message = centerMessage;
-                break;
-
-            case UP:
-                message = upperMessage;
-                break;
-
-            case LOW:
-            default:
-                message = lowerMessage;
-                break;
-        }
-        return (message);
+        messageHolder target = decideHolder(area);
+        return (target.getMessage());
     }
 }