2015-11-18 2 views
1

Привет, я работаю над игрой «Броненосец» в Android, и в настоящее время я пытаюсь реализовать деятельность по позиционированию корабля.Как обнаружить клик и длинный клик на холсте

У меня есть custum view with onDraw, представляющий доску, на которой вы размещаете корабли.

Я хочу, чтобы иметь возможность поворачивать корабли, с помощью синглета их и перетаскивать корабль, долгое нажатие на него. Дело в том, что я не могу просто использовать onClick и onLongClick, потому что мне нужно знать, где был щелчок на холсте. Я попытался использовать onTouch, но это не сработало. Я также пробовал использовать GestureDetector, но он просто запустил все.

Есть ли у вас какие-либо предложения относительно того, как подойти к этой логике?

ответ

0

я должен знать, где был щелчок на холсте

у вас есть пользовательский вид, поэтому вы можете легко использовать GestureDetector.SimpleOnGestureListener. Просто переопределите onTouchEvent() вашего CustomView и используйте onLongPressGestureDetector. Я бы предложил вам обработать это внутри самого CustomView, а не делать это в Activity или Fragment. Это будет поддерживать модульность.

Вы можете следовать код, приведенный ниже, чтобы получить это сделано:

CustomView.java

public class CustomView extends View { 

     private GestureDetectorCompat mGestureDetector; 
     private LongPressGestureListener longPressGestureListener; 

     CustomView(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      longPressGestureListener= new LongPressGestureListener(this); 
      mGestureDetector = new GestureDetectorCompat(context, longPressGestureListener); 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      mGestureDetector.onTouchEvent(event); 
      // Handle any other event here, if not long press. 
      return true; 
     } 
} 

LongPressGestureListener.java

public class LongPressGestureListener extends GestureDetector.SimpleOnGestureListener { 

     @Override 
     public void onLongPress(MotionEvent e) { 
      super.onLongPress(e); 
      // e will give you the location and everything else you want 
      // This is where you will be doing whatever you want to. 
      int eIndex = MotionEventCompat.getActionIndex(e); 
      float eX = MotionEventCompat.getX(e, eIndex); 
      float eY = MotionEventCompat.getY(e, eIndex); 
      Log.d("X:Y = " + eX + " : " + eY); 
     } 

     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 
} 
0

Вам необходимо будет использовать View.OnTouchListener.

  1. Установите сенсорный прослушиватель на свой холст с помощью view.setOnTouchListener(listener).

  2. Внесите свой приёмник. Вам необходимо будет реализовать метод onTouch(View v, MotionEvent event). В этом методе у вас будет доступ к событию касания, и вы сможете решить, если это простой щелчок, длинное нажатие и т. Д. И выполните соответствующие действия.

Подробнее об этом можно узнать здесь answer на SO.

Смежные вопросы