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;
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
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;
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;
}
/**
+ * タッチイベントをフックする
+ *
+ *
+ */
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent event)
+ {
+ //Log.v(TAG, " dispatchTouchEvent() ");
+ if (gestureParser != null)
+ {
+ //Log.v(TAG, " onTouch() ");
+ gestureParser.onTouch(event);
+ }
+ return (super.dispatchTouchEvent(event));
+ }
+
+ /**
*
*
*/
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)
{
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";
IPreferenceCameraPropertyAccessor.CONNECTION_METHOD_DEFAULT_VALUE
)
}
+ if (!items.containsKey(IPreferenceCameraPropertyAccessor.THETA_GL_VIEW))
+ {
+ editor.putBoolean(IPreferenceCameraPropertyAccessor.THETA_GL_VIEW, false)
+ }
editor.apply()
}
catch (e : Exception)
--- /dev/null
+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")
+ }
+}
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
- />
+ />
<LinearLayout
android:layout_width="match_parent"