Last active
December 29, 2015 15:09
-
-
Save niusounds/7688455 to your computer and use it in GitHub Desktop.
Simple RotateGestureDetector can be used in the same way as GestureDetector and ScaleGestureDetector.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context; | |
import android.view.MotionEvent; | |
public class RotateGestureDetector { | |
public static interface OnRotateListener { | |
boolean onRotate(float degrees, float focusX, float focusY); | |
} | |
public static class SimpleOnRotateGestureDetector implements OnRotateListener { | |
@Override | |
public boolean onRotate(float degrees, float focusX, float focusY) { | |
return false; | |
} | |
} | |
private static float RADIAN_TO_DEGREES = (float) (180.0 / Math.PI); | |
private OnRotateListener listener; | |
private float prevX = 0.0f; | |
private float prevY = 0.0f; | |
private float prevTan; | |
public RotateGestureDetector(OnRotateListener listener) { | |
this.listener = listener; | |
} | |
public boolean onTouchEvent(MotionEvent event) { | |
if (event.getPointerCount() == 2 && event.getActionMasked() == MotionEvent.ACTION_MOVE) { | |
boolean result = true; | |
float x = event.getX(1) - event.getX(0); | |
float y = event.getY(1) - event.getY(0); | |
float focusX = (event.getX(1) + event.getX(0)) * 0.5f; | |
float focusY = (event.getY(1) + event.getY(0)) * 0.5f; | |
float tan = (float) Math.atan2(y, x); | |
if (prevX != 0.0f && prevY != 0.0f) { | |
result = listener.onRotate((tan - prevTan) * RADIAN_TO_DEGREES, focusX, focusY); | |
} | |
prevX = x; | |
prevY = y; | |
prevTan = tan; | |
return result; | |
} else { | |
prevX = prevY = prevTan = 0.0f; | |
return true; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class UserActivity extends Activity { | |
private RotateGestureDetector rotateGestureDetector; | |
protected void onCreate(Bundle savedInstanceState) { | |
rotateGestureDetector = new RotateGestureDetector(new RotateGestureDetector.SimpleOnRotateGestureDetector() { | |
@Override | |
public boolean onRotate(float degrees, float focusX, float focusY) { | |
// something with rotate | |
return true; | |
} | |
}); | |
} | |
@Override | |
public boolean onTouchEvent(MotionEvent event) { | |
rotateGestureDetector.onTouchEvent(event); | |
return true; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment