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();
        }
    });
}