OSDN Git Service

Theta用にOpenGLのビューを用意する(準備その2)。
authorMRSa <mrsa@myad.jp>
Wed, 3 Feb 2021 15:05:40 +0000 (00:05 +0900)
committerMRSa <mrsa@myad.jp>
Wed, 3 Feb 2021 15:05:40 +0000 (00:05 +0900)
wear/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java
wear/src/main/java/jp/sfjp/gokigen/a01c/preference/IPreferenceCameraPropertyAccessor.java
wear/src/main/java/jp/sfjp/gokigen/a01c/preference/PreferenceInitializer.kt
wear/src/main/java/jp/sfjp/gokigen/a01c/utils/GestureParser.kt [new file with mode: 0644]
wear/src/main/res/layout-round/activity_main.xml

index ad157cb..d8a9d39 100644 (file)
@@ -10,6 +10,8 @@ import android.os.Vibrator;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
 import android.widget.ImageButton;
 import android.widget.TextView;
 import android.Manifest;
@@ -29,11 +31,11 @@ import jp.sfjp.gokigen.a01c.liveview.ICameraStatusReceiver;
 import jp.sfjp.gokigen.a01c.liveview.IMessageDrawer;
 import jp.sfjp.gokigen.a01c.liveview.CameraLiveViewOnTouchListener;
 import jp.sfjp.gokigen.a01c.liveview.glview.GokigenGLView;
-import jp.sfjp.gokigen.a01c.liveview.glview.ILiveViewRefresher;
 import jp.sfjp.gokigen.a01c.olycamerawrapper.OlyCameraCoordinator;
 import jp.sfjp.gokigen.a01c.preference.IPreferenceCameraPropertyAccessor;
 import jp.sfjp.gokigen.a01c.preference.PreferenceAccessWrapper;
 import jp.sfjp.gokigen.a01c.thetacamerawrapper.ThetaCameraController;
+import jp.sfjp.gokigen.a01c.utils.GestureParser;
 
 /**
  *   メインのActivity
@@ -49,7 +51,7 @@ public class MainActivity extends AppCompatActivity implements  IChangeScene, IS
     private PowerManager powerManager = null;
     private CameraLiveImageView liveView = null;
     private GokigenGLView glView = null;
-    private ILiveViewRefresher glViewRefresher = null;
+    private GestureParser gestureParser = null;
     private ICameraController currentCoordinator = null;
     private ICameraController olyAirCoordinator = null;
     private ICameraController thetaCoordinator = null;
@@ -368,16 +370,28 @@ public class MainActivity extends AppCompatActivity implements  IChangeScene, IS
             if (liveView == null)
             {
                 liveView = findViewById(R.id.liveview);
+                liveView.setVisibility(View.VISIBLE);
             }
             CameraLiveViewListenerImpl liveViewListener = new CameraLiveViewListenerImpl(liveView);
-/*
-            if (glView == null)
+            gestureParser = null;
+            glView = null;
+            boolean enableGlView = preferences.getBoolean(IPreferenceCameraPropertyAccessor.THETA_GL_VIEW, false);
+            if ((enableGlView)&&(connectionMethod.contains(IPreferenceCameraPropertyAccessor.CONNECTION_METHOD_THETA)))
             {
-                glView = findViewById(R.id.glview);
-                glViewRefresher = glView;
-                glView.setImageProvider(liveViewListener);
+                if (glView == null)
+                {
+                    // GL VIEW に切り替える
+                    glView = findViewById(R.id.glview);
+                }
+                if (glView != null)
+                {
+                    // GL VIEW に切り替える
+                    gestureParser = new GestureParser(getApplicationContext(), glView);
+                    glView.setImageProvider(liveViewListener);
+                    glView.setVisibility(View.VISIBLE);
+                    liveView.setVisibility(View.GONE);
+                }
             }
-*/
             olyAirCoordinator = new OlyCameraCoordinator(this, liveView, this, this);
             thetaCoordinator = new ThetaCameraController(this, this, this);
             currentCoordinator = (connectionMethod.contains(IPreferenceCameraPropertyAccessor.CONNECTION_METHOD_THETA)) ? thetaCoordinator : olyAirCoordinator;
@@ -792,6 +806,23 @@ public class MainActivity extends AppCompatActivity implements  IChangeScene, IS
     }
 
     /**
+     *   タッチイベントをフックする
+     *
+     *
+     */
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent event)
+    {
+        //Log.v(TAG, " dispatchTouchEvent() ");
+        if (gestureParser != null)
+        {
+            //Log.v(TAG, " onTouch() ");
+            gestureParser.onTouch(event);
+        }
+        return (super.dispatchTouchEvent(event));
+    }
+
+    /**
      *
      *
      */
@@ -945,7 +976,17 @@ public class MainActivity extends AppCompatActivity implements  IChangeScene, IS
                 liveView = findViewById(R.id.liveview);
             }
             liveView.setupInitialBackgroundImage(this);
+            liveView.setVisibility(View.VISIBLE);
             liveView.invalidate();
+
+            if (glView != null)
+            {
+                glView.setVisibility(View.GONE);
+                glView = null;
+            }
+
+
+
         }
         catch (Exception e)
         {
index e2cf284..f79e595 100644 (file)
@@ -15,6 +15,8 @@ public interface IPreferenceCameraPropertyAccessor
     String FRAME_GRID = "frame_grid";
     String FRAME_GRID_DEFAULT_VALUE = "0";
 
+    String THETA_GL_VIEW = "theta_gl_view";
+
     String IMAGE_CONVERTER = "image_converter";
     String IMAGE_CONVERTER_DEFAULT_VALUE = "0";
 
index 3967b84..30b621f 100644 (file)
@@ -32,6 +32,10 @@ class PreferenceInitializer
                         IPreferenceCameraPropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE
                 )
             }
+            if (!items.containsKey(IPreferenceCameraPropertyAccessor.THETA_GL_VIEW))
+            {
+                editor.putBoolean(IPreferenceCameraPropertyAccessor.THETA_GL_VIEW, false)
+            }
             editor.apply()
         }
         catch (e : Exception)
diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/utils/GestureParser.kt b/wear/src/main/java/jp/sfjp/gokigen/a01c/utils/GestureParser.kt
new file mode 100644 (file)
index 0000000..52aea9e
--- /dev/null
@@ -0,0 +1,93 @@
+package jp.sfjp.gokigen.a01c.utils
+
+import android.content.Context
+import android.view.GestureDetector
+import android.view.MotionEvent
+import android.view.ScaleGestureDetector
+import jp.sfjp.gokigen.a01c.liveview.glview.ILiveViewRefresher
+
+class GestureParser(context : Context, private val imageView : ILiveViewRefresher) : GestureDetector.OnGestureListener, ScaleGestureDetector.OnScaleGestureListener
+{
+    private val gestureDetector = GestureDetector(context, this)
+    private val scaleGestureDetector = ScaleGestureDetector(context, this)
+
+    // View.OnTouchListener
+    fun onTouch(event: MotionEvent?): Boolean
+    {
+        return (gestureDetector.onTouchEvent(event) || scaleGestureDetector.onTouchEvent(event))
+    }
+
+    // GestureDetector.OnGestureListener
+    override fun onDown(e: MotionEvent?): Boolean
+    {
+        //Log.v(TAG, " Gesture onDown")
+        return (false)
+    }
+
+    // GestureDetector.OnGestureListener
+    override fun onShowPress(e: MotionEvent?)
+    {
+        //Log.v(TAG, " Gesture onShowPress")
+    }
+
+    // GestureDetector.OnGestureListener
+    override fun onSingleTapUp(e: MotionEvent?): Boolean
+    {
+        //Log.v(TAG, " Gesture onSingleTapUp")
+        return (false)
+    }
+
+    // GestureDetector.OnGestureListener
+    override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean
+    {
+        //Log.v(TAG, " Gesture onScroll")
+        imageView.moveView(distanceX, distanceY)
+        return (false)
+    }
+
+    // GestureDetector.OnGestureListener
+    override fun onLongPress(e: MotionEvent?)
+    {
+        //Log.v(TAG, " Gesture onLongPress")
+        imageView.resetView()
+    }
+
+    // GestureDetector.OnGestureListener
+    override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean
+    {
+        //Log.v(TAG, " Gesture onFling")
+        return (false)
+    }
+
+    // ScaleGestureDetector.OnScaleGestureListener
+    override fun onScale(detector: ScaleGestureDetector?): Boolean
+    {
+        //Log.v(TAG, " Gesture onScale")
+        try
+        {
+            if (detector != null)
+            {
+                imageView.setScaleFactor(detector.scaleFactor)
+                return (true)
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (false)
+    }
+
+    // ScaleGestureDetector.OnScaleGestureListener
+    override fun onScaleBegin(detector: ScaleGestureDetector?): Boolean
+    {
+        //Log.v(TAG, " Gesture onScaleBegin")
+        return (true)
+    }
+
+    // ScaleGestureDetector.OnScaleGestureListener
+    override fun onScaleEnd(detector: ScaleGestureDetector?)
+    {
+        //Log.v(TAG, " Gesture onScaleEnd")
+    }
+}
index f9e346a..92c7ff2 100644 (file)
@@ -29,7 +29,7 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:gravity="center"
-        />
+            />
 
         <LinearLayout
             android:layout_width="match_parent"