gpt4 book ai didi

android - 为 Google Map v2 fragment 创建 OnDragListener

转载 作者:可可西里 更新时间:2023-11-01 19:10:07 25 4
gpt4 key购买 nike

我正在尝试为谷歌地图 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com