处理中SurfaceView触摸事件在地图API第2版 [英] Handling touch events in SurfaceView over Maps API v2
问题描述
我在创造,而用户移动地图将被触发的事件处理程序的问题。有一个 OnCameraChangeListener
,但它引发的在的地图移动止损。
I'm having issues in creating event handler that will be triggered while user moves the map around. There is a OnCameraChangeListener
, but it is triggered after map moving stops.
我已经创建 SurfaceView
过地图,现在我不知道如何从<$办理 onScroll
事件C $ C> OnGestureListener 。
I have created SurfaceView
over Maps, and now I have no idea how to handle onScroll
event from OnGestureListener
.
下面是示例code:
SurfaceView sv = new SView();
sv.setZOrderOnTop(true);
mapView.addView(sv);
...
public class SView extends SurfaceView implements Runnable, android.view.GestureDetector.OnGestureListener {
...
@Override
public boolean onTouchEvent(MotionEvent event) {
//this worked in Overlay in Maps API v1
if(gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
...
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.i("test","onScroll");
return false;
}
...
}
如果我设置返回true
在的onTouchEvent
, onScroll
的调用,但比我不能移动地图(这是显而易见的,该事件被消耗),我不知道该怎么往下分派事件映射对象。
If I set return true
in onTouchEvent
, onScroll
is called but than I can't move the Map (which is obvious, the event is consumed), and I don't know how to dispatch event down to Map object.
任何人都知道如何更新 SurfaceView
,而地图是感动?
Anyone knows how to update SurfaceView
while Map is moved?
推荐答案
我已经实现了一些其他的解决办法来解决这个问题。我所做的 - 就是我把我的GoogleMap的定制RelativeLayout的内部。
之后, onInterceptTouchEvent
回调的工作原理就像一个魅力和基础地图接收触摸事件,如预期
I have implemented some other solution to solve this problem. What I did - is I placed my GoogleMap inside custom RelativeLayout.
After that onInterceptTouchEvent
callback works like a charm and underlying map receives touch events as expected
这是我的xml:
<com.my.package.name.map.MapRelativeLayout
android:id="@+id/map_root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
</com.my.package.name.map.MapRelativeLayout>
和自定义的相对布局:
And custom relative layout:
package com.my.package.name.map;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.RelativeLayout;
public class MapRelativeLayout extends RelativeLayout
{
private GestureDetector gestureDetector;
public MapRelativeLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
gestureDetector = new GestureDetector(context, new GestureListener());
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
gestureDetector.onTouchEvent(ev);
return false;
}
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY)
{
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY)
{
//do whatever you want here
return false;
}
}
}
这篇关于处理中SurfaceView触摸事件在地图API第2版的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!