您好我正在使用Android上的Battleships游戏,目前我正在尝试实施船舶定位活动。
我有一个监视视图,onDraw代表你定位船只的板子。
我希望能够通过单击它们来旋转船只并通过长按它来拖动船只。问题是我不能只使用onClick和onLongClick,因为我需要知道画布上的点击位置。我尝试过使用onTouch但是没有用。我也尝试过使用GestureDetector,但它只是把所有东西都用完了。
您对如何处理此逻辑有任何建议吗?
答案 0 :(得分:0)
您需要使用View.OnTouchListener
。
使用view.setOnTouchListener(listener)
将触控侦听器设置到画布。
实施您的触控侦听器。您需要实现onTouch(View v, MotionEvent event)
方法。在这种方法中,您将可以访问触摸事件,并且您可以决定,如果是简单的点击,长按等,并执行相应的操作。
您可以在此answer上了解更多相关信息。
答案 1 :(得分:0)
我需要知道画布上的点击位置
您有自定义视图,因此您可以轻松使用GestureDetector.SimpleOnGestureListener
。只需覆盖CustomView的onTouchEvent()
,然后使用onLongPress
的{{1}}即可。我建议您在CustomView本身内处理此问题,而不是在GestureDetector
或Activity
中执行此操作。这样可以保持模块化。
您可以按照以下代码完成此操作:
<强> 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;
}
}