如何在android上设置多段线动画?
如何在android google地图上绘制动画多段线?我已经实现了动画的轨迹库。我想在android上的Lyft上创建多段线如何在android上设置多段线动画?,android,google-maps,google-polyline,Android,Google Maps,Google Polyline,如何在android google地图上绘制动画多段线?我已经实现了动画的轨迹库。我想在android上的Lyft上创建多段线 创建两个板条阵列列表,然后按给定方法创建多段线 private fun createPolyLine() { val lineOptions = PolylineOptions() lineOptions.width(6f) lineOptions.color(ContextCompat.getColor(act!!,
创建两个板条阵列列表,然后按给定方法创建多段线
private fun createPolyLine() {
val lineOptions = PolylineOptions()
lineOptions.width(6f)
lineOptions.color(ContextCompat.getColor(act!!, R.color.colorPrimary))
lineOptions.startCap(SquareCap())
lineOptions.endCap(SquareCap())
lineOptions.jointType(JointType.ROUND)
blackPolyLine = googleMap!!.addPolyline(lineOptions)
val greyOptions = PolylineOptions()
greyOptions.width(6f)
greyOptions.color(Color.GRAY)
greyOptions.startCap(SquareCap())
greyOptions.endCap(SquareCap())
greyOptions.jointType(JointType.ROUND)
greyPolyLine = googleMap!!.addPolyline(greyOptions)
animatePolyLine()
}
然后创建这些多段线的动画
private fun animatePolyLine() {
val animator = ValueAnimator.ofInt(0, 100)
animator.duration = 1500
animator.interpolator = LinearInterpolator()
animator.addUpdateListener { animator ->
val latLngList =
blackPolyLine!!.points
val initialPointSize = latLngList.size
val animatedValue = animator.animatedValue as Int
val newPoints = animatedValue * decodedPath.size / 100
if (initialPointSize < newPoints) {
latLngList.addAll(decodedPath.subList(initialPointSize, newPoints))
blackPolyLine!!.points = latLngList
}
}
animator.addListener(polyLineAnimationListener)
animator.start()
}
private var polyLineAnimationListener: Animator.AnimatorListener =
object : Animator.AnimatorListener {
override fun onAnimationStart(animator: Animator) {}
override fun onAnimationEnd(animator: Animator) {
val blackLatLng: MutableList<LatLng> = blackPolyLine!!.points
val greyLatLng: MutableList<LatLng> = greyPolyLine!!.points
greyLatLng.clear()
greyLatLng.addAll(blackLatLng)
blackLatLng.clear()
blackPolyLine!!.points = blackLatLng
greyPolyLine!!.points = greyLatLng
blackPolyLine!!.zIndex = 2f
animator.start()
}
override fun onAnimationCancel(animator: Animator) {}
override fun onAnimationRepeat(animator: Animator) {}
}
private fun animatePolyLine(){
val animator=ValueAnimator.ofInt(01100)
animator.duration=1500
animator.interpolator=LinearInterpolator()
animator.addUpdateListener{animator->
拉丁英语=
黑色多段线!!点
val initialPointSize=latLngList.size
val animatedValue=animator.animatedValue为Int
val newPoints=animatedValue*decodedPath.size/100
if(initialPointSize
private fun plotPolyline(){
var polyline=“已编码的电缆线路”
var list=PolyUtil.decode(多段线)
val blackOptions=PolylineOptions()
blackOptions.startCap(RoundCap())
blackOptions.endCap(RoundCap())
黑色选项。宽度(10.0f)
黑色选项。颜色(颜色。黑色)
blackOptions.zIndex(2.0f)
var blackPolyline=googleMap.addPolyline(blackOptions)
val greyOptions=PolylineOptions()
greyOptions.startCap(RoundCap())
greyOptions.endCap(RoundCap())
灰色选项。宽度(8.0f)
greyOptions.addAll(列表)
颜色(ContextCompat.getColor(this,R.color.gray\u-dark))
var greyPolyline=googleMap.addPolyline(灰色选项)
val valueAnimator=valueAnimator.ofInt(0,100)
valueAnimator.duration=1500
valueAnimator.interpolator=LinearInterpolator()
valueAnimator.addUpdateListener{
val points:List=greyPolyline.getPoints()
val percentValue=valueAnimator.animatedValue作为Int
val size=points.size
val newPoints=(大小*(百分比值/100.0f)).toInt()
val p=点。子列表(0,新点)
黑色多段线。点=p
}
valueAnimator.addListener(对象:Animator.AnimatorListener{
覆盖AnimationStart(动画:Animator?){
}
覆盖AnimationEnd(动画:Animator?){
动画?.start()
}
覆盖动画取消(动画:Animator?){
}
重写AnimationRepeat(动画:Animator?){
}
})
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(list.get(0),15.0f))
valueAnimator.start()
}
这可能有助于其工作,但我希望在进度增加时删除以前的路径颜色。有什么解决方案吗?@Sandip然后你可以删除旧路径并创建新路径我不明白你想说什么,如果是工作,那么批准它删除红色圆圈部分你从列表中删除latlng你可以展示一下如何使用Java完成吗?谢谢
private fun plotPolyline() {
var polyline = "encoded_pyline"
var list = PolyUtil.decode(polyline)
val blackOptions = PolylineOptions()
blackOptions.startCap(RoundCap())
blackOptions.endCap(RoundCap())
blackOptions.width(10.0f)
blackOptions.color(Color.BLACK)
blackOptions.zIndex(2.0f)
var blackPolyline = googleMap.addPolyline(blackOptions)
val greyOptions = PolylineOptions()
greyOptions.startCap(RoundCap())
greyOptions.endCap(RoundCap())
greyOptions.width(8.0f)
greyOptions.addAll(list)
greyOptions.color(ContextCompat.getColor(this, R.color.gray_dark))
var greyPolyline = googleMap.addPolyline(greyOptions)
val valueAnimator = ValueAnimator.ofInt(0, 100)
valueAnimator.duration = 1500
valueAnimator.interpolator = LinearInterpolator()
valueAnimator.addUpdateListener {
val points: List<LatLng> = greyPolyline.getPoints()
val percentValue = valueAnimator.animatedValue as Int
val size = points.size
val newPoints = (size * (percentValue / 100.0f)).toInt()
val p = points.subList(0, newPoints)
blackPolyline.points = p
}
valueAnimator.addListener(object: Animator.AnimatorListener{
override fun onAnimationStart(animation: Animator?) {
}
override fun onAnimationEnd(animation: Animator?) {
animation?.start()
}
override fun onAnimationCancel(animation: Animator?) {
}
override fun onAnimationRepeat(animation: Animator?) {
}
})
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(list.get(0), 15.0f))
valueAnimator.start()
}