Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class GameView extends SurfaceView {
- private ConcurrentMap<Integer, Point> activePointers; //Active pointers to know which pointer is doing what.
- public GameView() {
- super(context);
- //...
- activePointers = new ConcurrentHashMap<Integer, Point>();
- }
- //...
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- Point p;
- int x, y;
- int id, auxIndex;
- switch (event.getActionMasked()) {
- case MotionEvent.ACTION_DOWN:
- synchronized (holder) { //holder = getHolder();
- try {
- id = event.getPointerId(event.getActionIndex());
- x = Math.round(event.getX(id));
- y = Math.round(event.getY(id));
- activePointers.put(id, new Point(x, y));
- doThingsDown(id, x, y);
- } catch (Exception e) {
- //nothing
- }
- }
- break;
- case MotionEvent.ACTION_POINTER_DOWN:
- synchronized (holder) {
- try {
- id = event.getPointerId(event.getActionIndex());
- x = Math.round(event.getX(id));
- y = Math.round(event.getY(id));
- activePointers.put(id, new Point(x, y));
- doThingsDown(id, x, y);
- } catch (Exception e) {
- //nothing
- }
- }
- break;
- case MotionEvent.ACTION_MOVE:
- synchronized (holder) {
- try {
- for (Integer key : activePointers.keySet()) {
- p = activePointers.get(key);
- auxIndex = event.findPointerIndex(key);
- x = Math.round(event.getX(auxIndex));
- y = Math.round(event.getY(auxIndex));
- if (x != p.x || y != p.y) {
- doThingsMove(key, x, y);
- }
- }
- } catch (Exception e) {
- //nothing
- }
- }
- break;
- case MotionEvent.ACTION_UP:
- synchronized (holder) {
- id = event.getPointerId(event.getActionIndex());
- activePointers.remove(id);
- doThingsUp(id);
- }
- break;
- case MotionEvent.ACTION_POINTER_UP:
- synchronized (holder) {
- id = event.getPointerId(event.getActionIndex());
- activePointers.remove(id);
- doThingsUp(id);
- }
- break;
- case MotionEvent.ACTION_CANCEL: //this never calls, but is here just in case
- synchronized (holder) {
- id = event.getPointerId(event.getActionIndex());
- activePointers.remove(id);
- doThingsUp(id);
- }
- break;
- }
- gestureDetector.onTouchEvent(event); //I explain this below
- return true;
- }
- //...
- private GestureDetector gestureDetector = new GestureDetector(gameActivity, new GestureDetector.SimpleOnGestureListener() {
- @Override
- public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
- Log.d("ON FLING", "init: (" + event1.getX() + ", " + event1.getY() + ") , final: (" + event2.getX() + ", " + event2.getY() + ") , velocities: " + velocityX + " , " + velocityY);
- return true;
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement