谷歌地图android在动画标记和相机时闪烁

时间:2021-06-29 15:37:07

标签: android

我认为这是一个线程问题,但我不确定。

我正在使用 ValueAnimator。我也尝试过使用处理程序。

当标记和相机移动时,地图会闪烁或闪烁

https://github.com/saugatrai33/EatMore/issues/1

这里也有视频。

我也尝试删除 runOnUiThread{}。

删除 moveCamera() 方法工作正常。但是,自行车标记会随机旋转。

我想我需要处理线程。你能建议我怎么做吗。

谢谢。

private fun updateProviderLocation(it: Array<Any>) {
        val data1 = it[0] as JSONObject
        val lat: Double = data1.getString("lat").toDouble()
        val lng: Double = data1.getString("lng").toDouble()
        val latLng = LatLng(lat, lng)

        runOnUiThread {
            mTaxiMainViewModel.latitude.value = lat
            mTaxiMainViewModel.longitude.value = lng

            if (startLatLng.latitude != 0.0) endLatLng = startLatLng
            startLatLng = latLng

            if (endLatLng.latitude != 0.0) {
                if (srcMarker != null) {
                    carMarkerAnimUtil.carAnimWithBearing(mGoogleMap!!, srcMarker!!, endLatLng, startLatLng)
                } else {
                    try {
                        var static_url = resCheckRequest.responseData?.data?.get(0)?.ride?.vehicle_marker.toString()
                        var src_marker = CustomMark(this@TaxiMainActivity, mGoogleMap!!, startLatLng)
                        src_marker.execute(static_url, "", "")
                    } catch (e: Exception) {
                        e.printStackTrace()
                    }
                }
            }
        }
    }

fun carAnimWithBearing(mGoogleMap: GoogleMap, marker: Marker, start: LatLng, end: LatLng) {
        startLatLng = start
        if (!isMarkerRotating) {
            isMarkerRotating = true
            val valueAnimator = ValueAnimator.ofFloat(0F, 1F)
            valueAnimator.duration = 1900
            valueAnimator.interpolator = LinearInterpolator()
            valueAnimator.addUpdateListener { valueAnimator1 ->
                val v = valueAnimator1.animatedFraction
                val nextLocation = LatLng(
                        v * end.latitude + (1 - v) * start.latitude,
                        v * end.longitude + (1 - v) * start.longitude
                )
                marker.position = nextLocation
                val rotation = getRotation(start, nextLocation)
                if (!rotation.isNaN()) {
                    marker.rotation = rotation
                }
                marker.setAnchor(0.5f, 0.5f)
                moveCamera(mGoogleMap, nextLocation) // its causing flickers
                animateCamera(mGoogleMap, nextLocation) // maps not seen when adding bearing.
                isMarkerRotating = false
            }
            valueAnimator.start()
        }
    }


private fun moveCamera(mGoogleMap: GoogleMap, latLng: LatLng) {
        mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng))
    }

private fun animateCamera(mGoogleMap: GoogleMap, latLng: LatLng) {
        val currentCameraPosition = mGoogleMap.cameraPosition
        val currentZoom = currentCameraPosition.zoom
        val cameraPosition = CameraPosition.Builder().target(latLng)
                .zoom(currentZoom).build()
        mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition))
    }

0 个答案:

没有答案
相关问题