我在创建事件处理程序,而用户四处移动地图时将触发的问题。 有一个OnCameraChangeListener
,但地图移动停止后触发。
我创建了SurfaceView
了地图,现在我不知道该如何处理onScroll
从事件OnGestureListener
。
下面是示例代码:
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;
}
...
}
如果我设置return true
中onTouchEvent
, onScroll
被称作但比我无法移动地图(这是显而易见的,该事件被消耗),我不知道如何分派事件到地图对象。
任何人都知道如何更新SurfaceView
当MAP感动?
我已经实现了一些其他的解决办法来解决这个问题。 我所做的 - 是我把自定义的RelativeLayout在我的GoogleMap的。 之后onInterceptTouchEvent
回调就像一个魅力和基础地图接收触摸事件如预期
这里是我的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>
和自定义的相对布局:
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;
}
}
}
来源: Android的ListView控件:最主要的原因滚动不执行
你有没有打过电话super.onTouchEvent(event)
在你onTouchEvent
方法是什么?
编辑 -我想你想返回false
你也onScroll
方法。
那么你onTouchEvent
方法应该是:
@Override public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) { return true; } return super.onTouchEvent(event); }
其他可能有用的链接:
- Android的:如何判断一个视图滚动
- 添加GestureOverlayView我SurfaceView类,如何添加,查看层次?
- Android的onFling没有响应
- OnGestureListener onDown方法不会被调用
- 覆盖的onTouchEvent与滚动型竞争