Skip to content
Snippets Groups Projects
Commit 2fbd94db authored by Maxime Graulich's avatar Maxime Graulich
Browse files

Android: add translation/rotation button

parent f660bdc7
No related branches found
No related tags found
No related merge requests found
contrib/mobile/Android/res/drawable-mdpi/icon_rotate.png

18 KiB

contrib/mobile/Android/res/drawable-mdpi/icon_translate.png

7.57 KiB

...@@ -96,6 +96,25 @@ public class ModelFragment extends Fragment{ ...@@ -96,6 +96,25 @@ public class ModelFragment extends Fragment{
} }
}); });
glViewLayout.addView(_glView); 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()); _progressLayout = new LinearLayout(container.getContext());
ProgressBar bar = new ProgressBar(container.getContext()); ProgressBar bar = new ProgressBar(container.getContext());
bar.setOnClickListener(new View.OnClickListener() { bar.setOnClickListener(new View.OnClickListener() {
...@@ -108,7 +127,7 @@ public class ModelFragment extends Fragment{ ...@@ -108,7 +127,7 @@ public class ModelFragment extends Fragment{
_progressLayout.setAlpha(0); _progressLayout.setAlpha(0);
_progressLayout.setGravity(Gravity.CENTER); _progressLayout.setGravity(Gravity.CENTER);
_progressLayout.addView(_progress); _progressLayout.addView(_progress);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( layoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT); RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
......
...@@ -15,6 +15,8 @@ class mGLSurfaceView extends GLSurfaceView { ...@@ -15,6 +15,8 @@ class mGLSurfaceView extends GLSurfaceView {
private GestureDetector gesture; private GestureDetector gesture;
private ScaleGestureDetector scaleGesture; private ScaleGestureDetector scaleGesture;
private GLESRender _renderer; private GLESRender _renderer;
private boolean _rotate;
public mGLSurfaceView(Context context, GLESRender renderer) { public mGLSurfaceView(Context context, GLESRender renderer) {
super(context); super(context);
_renderer = renderer; _renderer = renderer;
...@@ -43,32 +45,8 @@ class mGLSurfaceView extends GLSurfaceView { ...@@ -43,32 +45,8 @@ class mGLSurfaceView extends GLSurfaceView {
@Override @Override
public boolean onTouchEvent(MotionEvent event) { public boolean onTouchEvent(MotionEvent event) {
if(event.getPointerCount() >= 3){ scaleGesture.onTouchEvent(event);
scaleGesture.onTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0,0, 0)); return gesture.onTouchEvent(event);
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);
}
} }
private class GestureListener implements OnGestureListener, OnDoubleTapListener{ private class GestureListener implements OnGestureListener, OnDoubleTapListener{
...@@ -91,7 +69,10 @@ class mGLSurfaceView extends GLSurfaceView { ...@@ -91,7 +69,10 @@ class mGLSurfaceView extends GLSurfaceView {
public boolean onScroll(MotionEvent e1, MotionEvent e2, public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) { float distanceX, float distanceY) {
if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false; 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(); requestRender();
return true; return true;
} }
...@@ -121,6 +102,8 @@ class mGLSurfaceView extends GLSurfaceView { ...@@ -121,6 +102,8 @@ class mGLSurfaceView extends GLSurfaceView {
} }
} }
public boolean getRotate() {return _rotate;}
public void setRotate(boolean r) {_rotate = r;}
public void resetScale(){ public void resetScale(){
scaleFactor = 1f; scaleFactor = 1f;
_renderer.scaleModel(scaleFactor); _renderer.scaleModel(scaleFactor);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment