微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使按钮点击累积?

如何解决如何使按钮点击累积?

我的地图缩放按钮有一个监听器:

class ZoomMapListener(
    mapView: MapView,private val zoom: Zoom
) : View.OnClickListener {

    private val localmapView = WeakReference(mapView)
    //private var clickCounter = 0

    override fun onClick(view: View?) {
        //clickCounter++
        localmapView.get()?.let {
            var cameraPosition = it.map.cameraPosition

            val zoom = if (zoom == IN) {
                cameraPosition.zoom + 1.0f
                //cameraPosition.zoom + (clickCounter * 1.0f)
            } else {
                cameraPosition.zoom - 1.0f
                //cameraPosition.zoom - (clickCounter * 1.0f)
            }

            cameraPosition = CameraPosition(
                cameraPosition.target,zoom,cameraPosition.azimuth,cameraPosition.tilt
            )

            it.map.move(cameraPosition,Animation(Animation.Type.SMOOTH,0.5f),null)
        }
    }
}

我是这样设置的:

zoomInMapButton.setonClickListener(ZoomMapListener(mapView,Zoom.IN))
zoomOutMapButton.setonClickListener(ZoomMapListener(mapView,Zoom.OUT))

但问题是,如果用户多次单击此按钮之一,则地图无法正确缩放,因为动画:用户单击按钮 -> 相机位置移动了 0.5 秒 -> 不到 0.5 秒用户正在单击第二个/第三个/等。 time 和 onClick 方法正在获取中间相机位置。因此,缩放的行为在不同情况下会有所不同。

因为我不想将动画持续时间设置为零,我一直在想我可以创建一个变量来保存这个点击计数(它在上面的代码中有注释),但这不是正确的方法,所以我卡住了

解决方法

您在地图框架中是否有任何选项可以停止当前动画(例如移动)?

如果你有然后就在点击方法的开头调用它

如果不是,那么恕我直言,这是引入一些变量 lastClicked = System.currentTimeMillis() 并在 if (System.currentTimeMillis() - lastClicked < 500) return 开头检查 onClick 的正确解决方案

,

我认为您的方法是正确的。只需做一些更改

class ZoomMapListener(
    mapView: MapView,private val zoom: Zoom
) : View.OnClickListener {

    private val localMapView = WeakReference(mapView)
    private var clickCounter = 0

    override fun onClick(view: View?) {
        clickCounter++
        if(clickCounter>1) return
        setZoom()
    }

    setZoom() {
        localMapView.get()?.let {
            var cameraPosition = it.map.cameraPosition

            val zoom = if (zoom == IN) {
                cameraPosition.zoom + 1.0f
                //cameraPosition.zoom + (clickCounter * 1.0f)
            } else {
                cameraPosition.zoom - 1.0f
                //cameraPosition.zoom - (clickCounter * 1.0f)
            }

            cameraPosition = CameraPosition(
                cameraPosition.target,zoom,cameraPosition.azimuth,cameraPosition.tilt
            )

            it.map.move(cameraPosition,Animation(Animation.Type.SMOOTH,0.5f),null)
            clickCounter--;
            Handler().postDelayed({
                if(counter>0) setZoom()
            },550)
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。