我认为这是一个线程问题,但我不确定。
我正在使用 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))
}