我想要什么?
当用户点击标记时,其图像应该发生变化,并且用户应该能够移动标记,并且我应该能够获取纬度和经度。下面是需求视频。
到目前为止我已经尝试过什么?
我尝试实现默认标记拖动侦听器,但它仅适用于长按。
我在堆栈溢出上查看了类似的问题,但没有运气。
尝试过地面覆盖,但运气不佳。
那么我怎样才能实现这种行为,任何提示都会受到赞赏。已经有一个应用程序可以做到这一点,所以这应该是可能的。
根据文档,您需要使用:
GoogleMap.OnMarkerClickListener
public static interface GoogleMap.OnMarkerClickListener
定义单击或点击标记时调用的方法的签名。
使用公共方法:
abstract boolean onMarkerClick(Marker marker)
单击或点击标记时调用。
代替
GoogleMap.OnMapLongClickListener
public static interface GoogleMap.OnMapLongClickListener
使用公共方法:
公共抽象无效onMapLongClick(LatLng点) 当用户在地图上做出长按手势时调用,但前提是地图的任何覆盖层都没有处理该手势。该方法的实现始终在 Android UI 线程上调用。
我上周偶然发现了这个,我想我找到了解决方案: 我们需要拦截触摸事件并编写自己的拖动算法。要拦截onTouchEvent,我们需要用自定义视图包装它来拦截它。
class TouchableWrapper(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs) {
var touchListener: OnTouchListener? = null
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
val result = touchListener?.onTouch(this, ev)
return if (result == false) super.dispatchTouchEvent(ev)
else result == true
}
}
包裹你的地图片段:
<com.example.mapplayground.presentation.utils.TouchableWrapper
android:id="@+id/map_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.example.mapplayground.presentation.utils.TouchableWrapper>
然后我们可以创建自定义触摸监听器,然后分配给可触摸包装器
class CustomOnTouchListener: View.OnTouchListener {
override fun onTouch(v: View, event: MotionEvent): Boolean {
when(event.action){
MotionEvent.ACTION_DOWN ->{
// do something like recording initial touch point
return true // if consumed, if not, it will propagated to the parent
}
MotionEvent.ACTION_MOVE -> {
// do something
return true // if consumed, if not, it will propagated to the parent
}
MotionEvent.ACTION_UP ->{
// do something to detect if its click or not
}
}
return false // propagate to parent eventually
}
}
touchableWrapper.touchListener = CustomTouchListener()
这是我的例子中侦听器的完整代码: https://gist.github.com/Humayung/30623f3fed1e07794cc01a98c2fae97f