diff --git a/contrib/mobile/Android/res/drawable-mdpi/icon_rotate.png b/contrib/mobile/Android/res/drawable-mdpi/icon_rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..0f0ec77d927c324994704e7064ac2125110060a3 Binary files /dev/null and b/contrib/mobile/Android/res/drawable-mdpi/icon_rotate.png differ diff --git a/contrib/mobile/Android/res/drawable-mdpi/icon_translate.png b/contrib/mobile/Android/res/drawable-mdpi/icon_translate.png new file mode 100644 index 0000000000000000000000000000000000000000..2c43ceab43ff0d8214f7b41ba6e47b6566f55e36 Binary files /dev/null and b/contrib/mobile/Android/res/drawable-mdpi/icon_translate.png differ diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ModelFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/ModelFragment.java index 5545d77f62c856ef2773861fcac3ed14a5012076..d3db4e1ec1d03c6f4c762c9d2b73aa375f7d2512 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/ModelFragment.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/ModelFragment.java @@ -96,6 +96,25 @@ public class ModelFragment extends Fragment{ } }); glViewLayout.addView(_glView); + RelativeLayout topRightLayout = new RelativeLayout(container.getContext()); + ImageButton rotationButton = new ImageButton(container.getContext()); + rotationButton.setBackgroundResource(R.drawable.icon_rotate); + rotationButton.setLayoutParams(new LinearLayout.LayoutParams(50, 50)); + rotationButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + boolean rotate = !_glView.getRotate(); + ((ImageButton)v).setBackgroundResource((rotate)?R.drawable.icon_translate:R.drawable.icon_rotate); + _glView.setRotate(rotate); + } + }); + topRightLayout.addView(rotationButton); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + RelativeLayout.LayoutParams.WRAP_CONTENT, + RelativeLayout.LayoutParams.WRAP_CONTENT); + layoutParams.setMargins(0, 100, 10, 0); + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + glViewLayout.addView(topRightLayout, layoutParams); _progressLayout = new LinearLayout(container.getContext()); ProgressBar bar = new ProgressBar(container.getContext()); bar.setOnClickListener(new View.OnClickListener() { @@ -108,7 +127,7 @@ public class ModelFragment extends Fragment{ _progressLayout.setAlpha(0); _progressLayout.setGravity(Gravity.CENTER); _progressLayout.addView(_progress); - RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + layoutParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); diff --git a/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java b/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java index 5f8d0cd1190c592a8ad2fe012099d481dccaa365..f22f26b09c19dbe6b065e0107610be20e2aae5a7 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/mGLSurfaceView.java @@ -15,6 +15,8 @@ class mGLSurfaceView extends GLSurfaceView { private GestureDetector gesture; private ScaleGestureDetector scaleGesture; private GLESRender _renderer; + private boolean _rotate; + public mGLSurfaceView(Context context, GLESRender renderer) { super(context); _renderer = renderer; @@ -43,32 +45,8 @@ class mGLSurfaceView extends GLSurfaceView { @Override public boolean onTouchEvent(MotionEvent event) { - if(event.getPointerCount() >= 3){ - scaleGesture.onTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0,0, 0)); - - final float x = event.getX(1); - final float y = event.getY(1); - - int action = event.getActionMasked(); - - if(action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_1_DOWN){ - _renderer.startInteraction(x,y); - } - else if(action == MotionEvent.ACTION_MOVE){ - _renderer.rotateModel(x, y); - requestRender(); - } - else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_1_UP){ - _renderer.endInteraction(x, y); - } - - return true; - } - else { - scaleGesture.onTouchEvent(event); - return gesture.onTouchEvent(event); - } - + scaleGesture.onTouchEvent(event); + return gesture.onTouchEvent(event); } private class GestureListener implements OnGestureListener, OnDoubleTapListener{ @@ -91,7 +69,10 @@ class mGLSurfaceView extends GLSurfaceView { public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false; - _renderer.translateModel(e2.getX(), e2.getY()); + if(_rotate) + _renderer.rotateModel(e2.getX(), e2.getY()); + else + _renderer.translateModel(e2.getX(), e2.getY()); requestRender(); return true; } @@ -121,6 +102,8 @@ class mGLSurfaceView extends GLSurfaceView { } } + public boolean getRotate() {return _rotate;} + public void setRotate(boolean r) {_rotate = r;} public void resetScale(){ scaleFactor = 1f; _renderer.scaleModel(scaleFactor);