Java Android和谷歌地图:淡出的脉冲动画
我已经创建了一个脉冲动画,它在地图上占据一个位置,并不断地发射一个脉冲(圆)。这正如预期的那样有效。然而,我希望脉搏逐渐消失,离这个点越远。你有没有想过如何做到最好 动画如下:Java Android和谷歌地图:淡出的脉冲动画,java,android,animation,Java,Android,Animation,我已经创建了一个脉冲动画,它在地图上占据一个位置,并不断地发射一个脉冲(圆)。这正如预期的那样有效。然而,我希望脉搏逐渐消失,离这个点越远。你有没有想过如何做到最好 动画如下: mCircle = mMap.addCircle( new CircleOptions() .center(mMarker.getPosition()) .strokeWidth(STROKE_WIDTH)
mCircle = mMap.addCircle(
new CircleOptions()
.center(mMarker.getPosition())
.strokeWidth(STROKE_WIDTH)
.strokeColor(Color.parseColor(DEFAULT_COLOR))
.radius(RADIUS));
mAnimator.setRepeatCount(ValueAnimator.INFINITE);
mAnimator.setRepeatMode(ValueAnimator.RESTART);
mAnimator.setIntValues(0, 100);
mAnimator.setDuration(DURATION);
mAnimator.setEvaluator(new IntEvaluator());
mAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedFraction = valueAnimator.getAnimatedFraction();
mCircle.setRadius(animatedFraction * SIZE);
}
});
mAnimator.start();
我不认为你想要的东西可以通过提供的信息来实现 我的建议是用一个,和。您可以在每次回调到
onAnimationUpdate()
时在画布上重新绘制一些形状,并更新地面覆盖图上的图像。大概是这样的:
初始化位图/画布
(这可能是类构造函数)
更新位图
private void updateCanvas() {
// Clear the canvas for new iteration of drawing
mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
// TODO: determine/update x, y, radius, paint as a function of animation progress
// i.e. for a fade effect, set the paint color to a diminishing alpha level
mPaint.setColor(mPulseColor);
mCanvas.drawCircle(x, y, radius, mPaint);
}
更新地面覆盖图
private void updateOverlay() {
mGroundOverlay.setImage(BitmapDescriptorFactory.fromBitmap(mBitmap))
}
添加地面覆盖层
(这是原始帖子中的run()
方法)
非常好的解决方案。非常感谢。我想实现一个类似的解决方案,而不受拖累。我需要在谷歌地图标记上显示一个脉冲动画。你能在达到这个目标后发布你的解决方案吗?谢谢
private void updateOverlay() {
mGroundOverlay.setImage(BitmapDescriptorFactory.fromBitmap(mBitmap))
}
private void addGroundOverlay() {
// Add ground overlay with the bitmap's initial state
mGroundOverlay = mMap.addGroundOverlay(new GroundOverlayOptions());
// TODO: Set values for bitmap's initial state
// Paint the canvas with the initial state
updateCanvas();
// Update the ground overlay
updateOverlay();
mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
// Update animation values
mPulseColor = Color.RED; // TODO: set color/alpha
// Paint canvas with new animation state
updateCanvas();
// Update overlay
updateOverlay();
}
});
}