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{
}
});
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);
......
......@@ -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,34 +45,10 @@ 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);
}
}
private class GestureListener implements OnGestureListener, OnDoubleTapListener{
public boolean onDown(MotionEvent e) {
_renderer.startInteraction(e.getX(),e.getY());
......@@ -91,6 +69,9 @@ class mGLSurfaceView extends GLSurfaceView {
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false;
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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment