java - 安卓和谷歌地图 : Fading pulse animation

标签 java android animation

我创建了一个脉冲动画,它在 map 上占据一个位置,并持续发出一个脉冲(圆圈)。这按预期工作。但是,我希望脉冲淡出,离点越远。关于如何实现最佳效果有什么想法吗?

动画如下:

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

最佳答案

我认为提供的 Google Maps Shapes 无法满足您的需求.

我的建议是使用 Canvas 来做到这一点, Bitmap , 和 Ground Overlay .您可以在每次回调到 onAnimationUpdate() 时在 Canvas 上重新绘制一些形状,并更新地面叠加层上的图像。像这样:

初始化位图/ Canvas (这可能是类构造函数)

private void init() {
    mBitmap = Bitmap.createBitmap(MAX_ANIMATION_WIDTH, MAX_ANIMATION_HEIGHT, Bitmap.Config.ARGB_8888);
    mCanvas = new Canvas(mBitmap);
}

更新位图

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

关于java - 安卓和谷歌地图 : Fading pulse animation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38107197/

相关文章:

Java 套接字 - 仅在需要时从服务器向客户端发送不同类型的信息,反之亦然

java - Spring Data Redis(1.3.2.RELEASE)是否支持jedis的JedisSentinelPool?

java - 更改已创建文件的权限,以便只有当前用户可以读取它

android检测是否是晚上

Android:添加带有展开动画的 View (不闪烁)

css - 为什么这个 css gooey 不起作用?

java动态内存分配?

android - 在 Playstore 上上传应用程序后,Firebase 电话身份验证不起作用

android - 图层列表可绘制未正确绘制

python - 暂停 matplotlib 自定义动画循环