From 8b04cb0bcb03c95da779195bcef8575e2aef0c44 Mon Sep 17 00:00:00 2001 From: MRSa Date: Thu, 4 Feb 2021 00:05:40 +0900 Subject: [PATCH] =?utf8?q?Theta=E7=94=A8=E3=81=ABOpenGL=E3=81=AE=E3=83=93?= =?utf8?q?=E3=83=A5=E3=83=BC=E3=82=92=E7=94=A8=E6=84=8F=E3=81=99=E3=82=8B?= =?utf8?q?=EF=BC=88=E6=BA=96=E5=82=99=E3=81=9D=E3=81=AE=EF=BC=92=EF=BC=89?= =?utf8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../java/jp/sfjp/gokigen/a01c/MainActivity.java | 57 +++++++++++-- .../IPreferenceCameraPropertyAccessor.java | 2 + .../a01c/preference/PreferenceInitializer.kt | 4 + .../jp/sfjp/gokigen/a01c/utils/GestureParser.kt | 93 ++++++++++++++++++++++ wear/src/main/res/layout-round/activity_main.xml | 2 +- 5 files changed, 149 insertions(+), 9 deletions(-) create mode 100644 wear/src/main/java/jp/sfjp/gokigen/a01c/utils/GestureParser.kt diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java index ad157cb..d8a9d39 100644 --- a/wear/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java +++ b/wear/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java @@ -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) { diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/preference/IPreferenceCameraPropertyAccessor.java b/wear/src/main/java/jp/sfjp/gokigen/a01c/preference/IPreferenceCameraPropertyAccessor.java index e2cf284..f79e595 100644 --- a/wear/src/main/java/jp/sfjp/gokigen/a01c/preference/IPreferenceCameraPropertyAccessor.java +++ b/wear/src/main/java/jp/sfjp/gokigen/a01c/preference/IPreferenceCameraPropertyAccessor.java @@ -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"; diff --git a/wear/src/main/java/jp/sfjp/gokigen/a01c/preference/PreferenceInitializer.kt b/wear/src/main/java/jp/sfjp/gokigen/a01c/preference/PreferenceInitializer.kt index 3967b84..30b621f 100644 --- a/wear/src/main/java/jp/sfjp/gokigen/a01c/preference/PreferenceInitializer.kt +++ b/wear/src/main/java/jp/sfjp/gokigen/a01c/preference/PreferenceInitializer.kt @@ -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 index 0000000..52aea9e --- /dev/null +++ b/wear/src/main/java/jp/sfjp/gokigen/a01c/utils/GestureParser.kt @@ -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") + } +} diff --git a/wear/src/main/res/layout-round/activity_main.xml b/wear/src/main/res/layout-round/activity_main.xml index f9e346a..92c7ff2 100644 --- a/wear/src/main/res/layout-round/activity_main.xml +++ b/wear/src/main/res/layout-round/activity_main.xml @@ -29,7 +29,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" - /> + />