如何检测画布上的click和longClick

时间:2015-11-18 12:56:13

标签: android onclick android-canvas onlongclicklistener

您好我正在使用Android上的Battleships游戏,目前我正在尝试实施船舶定位活动。

我有一个监视视图,onDraw代表你定位船只的板子。

我希望能够通过单击它们来旋转船只并通过长按它来拖动船只。问题是我不能只使用onClick和onLongClick,因为我需要知道画布上的点击位置。我尝试过使用onTouch但是没有用。我也尝试过使用GestureDetector,但它只是把所有东西都用完了。

您对如何处理此逻辑有任何建议吗?

2 个答案:

答案 0 :(得分:0)

您需要使用View.OnTouchListener

  1. 使用view.setOnTouchListener(listener)将触控侦听器设置到画布。

  2. 实施您的触控侦听器。您需要实现onTouch(View v, MotionEvent event)方法。在这种方法中,您将可以访问触摸事件,并且您可以决定,如果是简单的点击,长按等,并执行相应的操作。

  3. 您可以在此answer上了解更多相关信息。

答案 1 :(得分:0)

  

我需要知道画布上的点击位置

您有自定义视图,因此您可以轻松使用GestureDetector.SimpleOnGestureListener。只需覆盖CustomView的onTouchEvent(),然后使用onLongPress的{​​{1}}即可。我建议您在CustomView本身内处理此问题,而不是在GestureDetectorActivity中执行此操作。这样可以保持模块化。

您可以按照以下代码完成此操作:

<强> CustomView.java

Fragment

<强> LongPressGestureListener.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;
        }
}