当我的项目中需要捕获google map的touch事件时,才发现google没有提供OnTouchListener,在其提供的一些listener中看了一遍也没发现有什么可以替代的,一室查了一番。还好有人实现了该功能,原文链接如下:
How to detect a user pan/touch/drag on Android Map v2
作者捕获的是按屏幕200毫秒以上的事件,有点像LongClick,逻辑改改就可以捕获自己想要的事件了,对我来说,其实想捕获“用户移动了地图”的事件,代码如下:
public class MySupportMapFragment extends SupportMapFragment {
public View mOriginalContentView;
public TouchableWrapper mTouchView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
mOriginalContentView = super.onCreateView(inflater, parent, savedInstanceState);
mTouchView = new TouchableWrapper(getActivity());
mTouchView.addView(mOriginalContentView);
return mTouchView;
}
@Override
public View getView() {
return mOriginalContentView;
}
}
public class TouchableWrapper extends FrameLayout {
private float downX = 0;
private float downY = 0;
private float upX = 0;
private float upY = 0;
private static final float MOVE_DISTANCE = 40;
private UpdateMapAfterUserInterection updateMapAfterUserInterection;
public TouchableWrapper(Context context) {
super(context);
// Force the host activity to implement the UpdateMapAfterUserInterection Interface
try {
updateMapAfterUserInterection = (MapActivity) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement UpdateMapAfterUserInterection");
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// lastTouched = SystemClock.uptimeMillis();
downX = ev.getX();
downY = ev.getY();
break;
case MotionEvent.ACTION_UP:
upX = ev.getX();
upY = ev.getY();
float intervalX = Math.abs(upX - downX);
float intervalY = Math.abs(upY - downY);
if (intervalX > MOVE_DISTANCE || intervalY > MOVE_DISTANCE) {
// Update the map
updateMapAfterUserInterection.onUpdateMapAfterUserInterection();
}
break;
}
return super.dispatchTouchEvent(ev);
}
// Map Activity must implement this interface
public interface UpdateMapAfterUserInterection {
public void onUpdateMapAfterUserInterection();
}
}
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="net.jackie.view.MySupportMapFragment"/>
public class MapActivity extends FragmentActivity implements UpdateMapAfterUserInterection {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// Implement the interface method
public void onUpdateMapAfterUserInterection() {
// TODO Update the map now
}
}
分享到:
相关推荐
在Android开发中,触摸事件处理是用户界面交互的关键部分,`onTouchEvent` 和 `onInterceptTouchEvent` 是处理这些事件的两个重要方法。本文将深入探讨这两个方法的使用、顺序以及它们在Android事件分发机制中的角色...
`onInterceptTouchEvent`和`onTouchEvent`是两个关键的方法,它们协同工作以处理触摸屏幕的动作。这篇文章将深入探讨这两个方法的调用关系及其在Android事件分发机制中的作用。 首先,我们要理解Android的事件分发...
为了实现上下左右滑动,我们需要在`onTouchEvent`中捕获ACTION_DOWN和ACTION_MOVE事件,并记录初始触点位置和后续移动的位置。以下是关键步骤: 1. **初始化状态**:在ACTION_DOWN事件中,获取当前触摸点的坐标(x1...
这个“博客园项目”显然采用了一个自定义的实现,通过重写`onTouchEvent`方法来监听用户的触摸事件,从而实现屏幕的滑动触发菜单的功能。下面将详细解释这一过程以及可能涉及的相关技术。 1. **重写onTouchEvent**...
在Android开发中,理解和掌握`onInterceptTouchEvent`与`onTouchEvent`的调用时序至关重要,因为它们是实现触摸事件处理的关键。这两个方法都属于Android的触摸事件处理机制,涉及到了ViewGroup与子View之间的事件...
`onInterceptTouchEvent`和`onTouchEvent`是两个至关重要的方法,它们共同构成了Android视图层次结构中的触摸事件分发机制。下面我们将深入探讨这两个方法的用法及其在实际开发中的应用场景。 1. `...
`onInterceptTouchEvent`和`onTouchEvent`是两个关键的方法,它们共同构成了Android事件分发机制的核心。 `onInterceptTouchEvent`方法在ViewGroup中定义,它的主要作用是拦截事件流,即决定事件是否由父视图处理,...
`onInterceptTouchEvent`和`onTouchEvent`是两个核心的方法,它们共同决定了Android应用如何响应用户的触摸操作。这两个方法主要在ViewGroup(如布局)和View(如按钮、文本框等)中被使用。 首先,我们来理解`...
`OnTouchEvent`是我们处理触摸事件的主要接口,这个压缩包`OnTouchEvent.rar`很可能包含了演示如何在Android应用中实现事件分发的示例代码和流程图。下面,我们将深入探讨Android事件分发机制以及`OnTouchEvent`方法...
Android onTouchEvent 自定义滑动布局 Android 中的 onTouchEvent 事件是一种常用的触摸事件处理机制,它可以帮助开发者实现各种滑动布局需求。在本篇文章中,我们将详细介绍如何使用 onTouchEvent 事件来实现一个...
这篇博客“2011.08.30——— android setOnTouchListener onTouchEvent”主要探讨了如何在Android应用中处理触摸事件,尤其是通过`setOnTouchListener`和`onTouchEvent`方法。下面将详细解析这两个方法的工作原理...
返回`false`则表示事件未被处理,可能允许父视图或其他组件捕获。 3. **触摸事件的传递流程**: 触摸事件的传递通常遵循从父到子的顺序,从最顶级的`ViewGroup`开始,一直向下传递到最具体的`View`。当事件到达一...
在描述中提到的博客链接(由于无法直接访问,以下内容基于一般知识推测)很可能详细解释了如何重写`onInterceptTouchEvent`和`onTouchEvent`来实现自定义的事件分发逻辑。这可能包括了如何在仿ViewPager中判断滑动...
在Android开发中,触摸事件的处理是用户交互的基础,而`onTouchEvent`和`onInterceptTouchEvent`则是处理这些事件的关键方法。这篇文章将深入解析这两个方法的区别和它们在触摸事件处理链中的作用。 首先,`...
本文将深入探讨Android事件模型,特别是`onTouchEvent`和`interceptTouchEvent`的关系,帮助开发者更好地理解这两个方法如何协同工作以实现复杂的触摸事件处理。 首先,Android事件模型基于触摸事件的分发机制,它...
如果一个`ViewGroup`想要捕获子视图的事件而不是让子视图直接处理,它需要在`onInterceptTouchEvent`中返回`true`。当`onInterceptTouchEvent`返回`false`时,触摸事件将传递给子视图。如果子视图的`onTouchEvent`...
9.6 移动版GoogleMap——Geocoder反查Address对象 9.7 规划导航路径——DirectionsRoute 9.8 移动设备上的Picasa相册——GooglePicasaAPI 9.9 随身翻译机——GoogleTranslateAPI 第10章 创意Android程序设计 10.1 ...
在你的`Activity`或`Fragment`的`onTouchEvent(MotionEvent event)`方法中,调用`GestureDetector`的`onTouchEvent(event)`。如果返回`true`,表示`GestureDetector`已经处理了这个事件,否则你应该自己处理。 3. ...