【发布时间】:2016-04-06 16:55:19
【问题描述】:
我正在开发 Android 项目并尝试为这样的标记实现脉冲效果: https://github.com/TransitApp/SVPulsingAnnotationView
但我遇到了谷歌地图不支持标记动画的问题。
您知道如何在 Android 上实现它吗? 也许我应该为地图使用另一个库?
【问题讨论】:
标签: android google-maps google-maps-markers
我正在开发 Android 项目并尝试为这样的标记实现脉冲效果: https://github.com/TransitApp/SVPulsingAnnotationView
但我遇到了谷歌地图不支持标记动画的问题。
您知道如何在 Android 上实现它吗? 也许我应该为地图使用另一个库?
【问题讨论】:
标签: android google-maps google-maps-markers
我用这个,有些闪烁,但没有更好的找不到
Bitmap markerIcon=drawableToBitmap(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_lens_black_24dp, null));
pulseMarker(markerIcon, 2000);
...
void pulseMarker(final Bitmap markerIcon, final long onePulseDuration) {
final Handler handler = new Handler();
final long startTime = System.currentTimeMillis();
final Interpolator interpolator = new CycleInterpolator(1f);
handler.post(new Runnable() {
@Override
public void run() {
if (jumpingMarker!=null /*&& jumpingMarker.isVisible()*/) {
long elapsed = System.currentTimeMillis() - startTime;
float t = interpolator.getInterpolation((float) elapsed / (float)onePulseDuration);
jumpingMarker.setIcon(BitmapDescriptorFactory.fromBitmap(scaleBitmap(markerIcon, 1.0f + 0.75f * t)));
handler.postDelayed(this, 100);
}
}
});
}
【讨论】:
试试这个 pass map 和 position latlng to this function 添加脉冲/波纹动画到地图标记 kotlin 函数
fun startPulsatorAnimation(mMap: GoogleMap, latlng: LatLng) {
var mCircle = mMap.addCircle(
CircleOptions()
.center(LatLng(latlng.latitude, latlng.longitude))
.strokeWidth(2f)
.strokeColor(Color.parseColor("#449A3E91"))
.fillColor(Color.parseColor("#229A3E91"))
.radius(100.0)
)
var mAnimator = ValueAnimator()
mAnimator.setRepeatCount(ValueAnimator.INFINITE)
mAnimator.setRepeatMode(ValueAnimator.REVERSE)
mAnimator.setIntValues(1000, 2000)
mAnimator.setDuration(6000)
mAnimator.setEvaluator(IntEvaluator())
mAnimator.setInterpolator(AccelerateDecelerateInterpolator())
mAnimator.addUpdateListener(ValueAnimator.AnimatorUpdateListener { valueAnimator ->
val animatedFraction = valueAnimator.animatedFraction
mCircle.setRadius((animatedFraction * 800).toDouble())
})
mAnimator.start()
}
【讨论】: