Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.41 KB | None | 0 0
  1. public class GameView extends SurfaceView {
  2.  
  3. private ConcurrentMap<Integer, Point> activePointers; //Active pointers to know which pointer is doing what.
  4.  
  5. public GameView() {
  6. super(context);
  7. //...
  8. activePointers = new ConcurrentHashMap<Integer, Point>();
  9. }
  10.  
  11. //...
  12.  
  13. @Override
  14. public boolean onTouchEvent(MotionEvent event) {
  15. Point p;
  16. int x, y;
  17. int id, auxIndex;
  18.  
  19. switch (event.getActionMasked()) {
  20. case MotionEvent.ACTION_DOWN:
  21. synchronized (holder) { //holder = getHolder();
  22. try {
  23. id = event.getPointerId(event.getActionIndex());
  24. x = Math.round(event.getX(id));
  25. y = Math.round(event.getY(id));
  26. activePointers.put(id, new Point(x, y));
  27. doThingsDown(id, x, y);
  28. } catch (Exception e) {
  29. //nothing
  30. }
  31. }
  32. break;
  33.  
  34. case MotionEvent.ACTION_POINTER_DOWN:
  35. synchronized (holder) {
  36. try {
  37. id = event.getPointerId(event.getActionIndex());
  38. x = Math.round(event.getX(id));
  39. y = Math.round(event.getY(id));
  40. activePointers.put(id, new Point(x, y));
  41. doThingsDown(id, x, y);
  42. } catch (Exception e) {
  43. //nothing
  44. }
  45. }
  46. break;
  47.  
  48. case MotionEvent.ACTION_MOVE:
  49. synchronized (holder) {
  50. try {
  51. for (Integer key : activePointers.keySet()) {
  52. p = activePointers.get(key);
  53. auxIndex = event.findPointerIndex(key);
  54. x = Math.round(event.getX(auxIndex));
  55. y = Math.round(event.getY(auxIndex));
  56. if (x != p.x || y != p.y) {
  57. doThingsMove(key, x, y);
  58. }
  59. }
  60. } catch (Exception e) {
  61. //nothing
  62. }
  63. }
  64. break;
  65.  
  66. case MotionEvent.ACTION_UP:
  67. synchronized (holder) {
  68. id = event.getPointerId(event.getActionIndex());
  69. activePointers.remove(id);
  70. doThingsUp(id);
  71. }
  72. break;
  73.  
  74. case MotionEvent.ACTION_POINTER_UP:
  75. synchronized (holder) {
  76. id = event.getPointerId(event.getActionIndex());
  77. activePointers.remove(id);
  78. doThingsUp(id);
  79. }
  80. break;
  81.  
  82. case MotionEvent.ACTION_CANCEL: //this never calls, but is here just in case
  83. synchronized (holder) {
  84. id = event.getPointerId(event.getActionIndex());
  85. activePointers.remove(id);
  86. doThingsUp(id);
  87. }
  88. break;
  89. }
  90.  
  91. gestureDetector.onTouchEvent(event); //I explain this below
  92.  
  93. return true;
  94. }
  95. //...
  96.  
  97. private GestureDetector gestureDetector = new GestureDetector(gameActivity, new GestureDetector.SimpleOnGestureListener() {
  98. @Override
  99. public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
  100. Log.d("ON FLING", "init: (" + event1.getX() + ", " + event1.getY() + ") , final: (" + event2.getX() + ", " + event2.getY() + ") , velocities: " + velocityX + " , " + velocityY);
  101. return true;
  102. }
  103. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement