- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试为谷歌地图 fragment 设置一个 onDrag 监听器,但无法触发拖动事件。由于 map 不直接支持拖动事件,我正在尝试为 View 实现一个拖动监听器。我知道 onMarkerDrag 事件,但这对我没有好处,因为我不想四处移动标记。
捕获 map 拖动事件的原因有两个:
首先检测用户是否平移了 map 。如果他们还没有,我喜欢将他们的位置保留在屏幕上,如果不在 map 上,我会用动画显示他们的位置。如果他们平移了 map ,我假设他们知道他们想看什么并强制在屏幕上显示位置。 (这似乎应该包含在 API 中)
陷印的第二个原因是允许用户在 map 上画线和多边形。我可以使用 onTap 事件(添加点)来做到这一点,但我也希望能够让他们自由发挥。
我的代码是这样的:
主要 Activity :
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
setUpMapIfNeeded();
mMapView = findViewById(R.id.map);
myMapDragListener = new MapDragListener();
mMapView.setOnDragListener(myMapDragListener);
听众:
public class MapDragListener implements OnDragListener {
/**
*
*/
public MapDragListener() {
super();
say.logCat("MapDragListener: I'm ALIVE!!!!");
}
private AkamaiAnnounce say = new AkamaiAnnounce();
private boolean inDrag;
private boolean hasPanned=false;
@Override
public boolean onDrag(View v, DragEvent event) {
say.logCat("MapDragListener.onDrag: " + event.toString());
//String dotTAG = (String) getTag();
if (event.getLocalState() != this) {
return false;
}
boolean myResult = true;
int action = event.getAction();
float x = event.getX();
float y = event.getY();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
inDrag = true;
break;
case DragEvent.ACTION_DRAG_LOCATION:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
myResult = false;
break;
case DragEvent.ACTION_DRAG_ENDED:
inDrag = false; // change color of original dot back
hasPanned=true;
break;
default:
myResult = false;
break;
}
return false;
//return myResult;
}
public boolean hasPanned() {
return hasPanned;
}
public void setHasPanned(boolean hasPanned) {
this.hasPanned = hasPanned;
}
}
map 工作正常。监听器实例化,但我的 onDrag 事件从未触发。有什么想法吗?
最佳答案
要获取包含 googleMap 的 fragment 的拖动事件监听器,可以使用以下 google 方法。我们可以得到 map 的目标位置。
googleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
Log.e(TAG,"==camera idle=="+ googleMap.getCameraPosition().target);
}
});
googleMap.setOnCameraMoveStartedListener(new GoogleMap.OnCameraMoveStartedListener() {
@Override
public void onCameraMoveStarted(int reason) {
if (reason ==REASON_GESTURE) {
isMaptouched=true;
Toast.makeText(getActivity(), "The user gestured on the map.",
Toast.LENGTH_SHORT).show();
} else if (reason ==REASON_API_ANIMATION) {
Toast.makeText(getActivity(), "The user tapped something on the map.",
Toast.LENGTH_SHORT).show();
} else if (reason ==REASON_DEVELOPER_ANIMATION) {
Toast.makeText(getActivity(), "The app moved the camera.",
Toast.LENGTH_SHORT).show();
}
}
});
关于android - 为 Google Map v2 fragment 创建 OnDragListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223155/
我正在使用 view.startDrag() 开始拖动操作。拖动时,事件会在 OnDragListener 中接收。我还使用 DragShadowBuilder 在拖动时显示 View B 的最后一张
我正在制作一个带有自定义行和自定义适配器的 ListView 。我已将 OnTouchListener 和 OnDragListener 附加到 ListView 中的每个 View 。 如果拖放结果
我有一个扩展 DialogFragment 的类。我必须在拖动后立即获取对话的当前坐标。所以我在类中实现了 OnDragListener 并覆盖了 onDrag() 方法。但是我没有收到任何对 onD
我需要在使用 stopSelf() 激活监听器后停止此服务;然而,即使没有拖动事件,服务也会结束......在调用 StopService 之前,如何检测是否发生了拖动事件? m
我在我的应用程序中使用拖放功能。它工作正常。现在我在为 View 设置动画时遇到问题,如果 View 未放置在放置的 View 上,则 View 返回到其原始位置。 我已经通过 创建了我的阴影 Vie
如您所知,OnDragListener开始于 API 级别 11 我想使用它,但不幸的是,我不能,因为我的目标设备是 1.6 及更高版本(API 4)。 是否有任何替代的类似类/库/想法可能有帮助
我正在尝试弄清楚如何执行以下操作: 我有一个 Activity 和一个 fragment 充当一种抽屉导航(右侧)。在那个抽屉 fragment 中,我有一个 GridView 。目前,我可以长按该
我的应用程序有一个类 MarkedLine,它扩展了 View。此类的实例显示在 fragment 中。我希望用户能够做以下三件事: 通过“捏合”和“拉伸(stretch)”手势放大线条 触摸直线的任
我正在制作一个游戏应用程序,我需要在其中使用 onDraglistener 进行拖放,这是我在实现 onDraglistener 的类上所做的。 @Override public boolean
我正在使用 VideoView 播放视频。当我将它从原来的位置拖到新位置时,我想改变它的位置。我使用了以下代码: video_view.setOnDragListener(new OnDragList
我使用 onDragListener 在屏幕上拖动一个对象,这部分效果很好。但我还需要在拖动时检查屏幕的 x、y 坐标。我重写了 onTouch 方法,它也运行良好。但是一旦我拖动了对象,ontouc
我有一个使用 OnDragListener 的应用。 由于这仅在 API 级别 11 中引入,我正在寻找一个支持较低级别此功能的库(类似于 ActionBarSherlock for Fragment
我在使用 OnDragListener 时遇到了一个奇怪的问题。我的目标 View 很好地获取了 ACTION_DROP 事件并对其进行了处理;但它从不接收 ACTION_DRAG_STARTED 或
我正在尝试为谷歌地图 fragment 设置一个 onDrag 监听器,但无法触发拖动事件。由于 map 不直接支持拖动事件,我正在尝试为 View 实现一个拖动监听器。我知道 onMarkerDra
我是一名优秀的程序员,十分优秀!