android - 动画标记谷歌地图如何像 android 中的图像所示?

标签 android google-maps animation

如何在 android 的谷歌地图标记中添加这种类型的动画?

如果用户点击图标超过两秒,则标记可点击

如何在android中设置这个?

enter image description here

最佳答案

这是循环方法的示例 - 首先是记录,然后是代码。

这里的半径增长是线性的,但在您的示例中显然是一个不同的函数(它随着扩展而减慢),因此您需要使用它。

enter image description here

public void pulseCircleTest() {

    // arbitrary point
    LatLng pt = new LatLng(39.171755, -86.510632);

    // move map to point of interest
    CameraPosition cp = CameraPosition.builder().target(pt).zoom(8.0F).build();
    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp));

    // create a circle and start animation
    int color = Color.BLUE;
    float initialRadius = 10;
    float maxRadius = 20000f;
    CircleOptions co = new CircleOptions().center(pt).radius(initialRadius).strokeColor(color).fillColor(color).strokeWidth(1.0f);
    Circle c = mMap.addCircle(co);
    Circle c2 = mMap.addCircle(co);

    final Handler h = new Handler();
    h.postDelayed(new Fader(h,c, initialRadius, maxRadius, Color.BLUE, co), 300);
    h.postDelayed(new Fader(h,c2, initialRadius, maxRadius, Color.BLUE, co), 750);
}

private class Fader implements Runnable {
    private float radius, initialRadius, maxRadius;
    private int baseColor, color, initialColor;
    private Handler h;
    private Circle c;
    private float radiusJump = 400;
    int numIncrements, alphaIncrement;
    private CircleOptions co;

    public Fader(Handler h, Circle c, float initialRadius, float maxRadius, int initialColor, CircleOptions co) {
        this.initialRadius = initialRadius;
        this.initialColor = initialColor;
        this.maxRadius = maxRadius;
        this.h = h;
        this.c = c;
        this.co = co;
        reset();
    }

    private void reset() {
        radius = initialRadius;
        this.color = initialColor;
        this.baseColor = initialColor;
        numIncrements = (int)((maxRadius - initialRadius) / radiusJump);
        alphaIncrement = 0x100 / numIncrements;
        if (alphaIncrement <= 0) alphaIncrement = 1;
    }

    public void run() {
        int alpha = Color.alpha(color);
        radius = radius + radiusJump;
        c.setRadius(radius);
        alpha -= alphaIncrement;
        color = Color.argb(alpha, Color.red(baseColor), Color.green(baseColor), Color.blue(baseColor));
        c.setFillColor(color);
        c.setStrokeColor(color);

        if (radius < maxRadius) {
            h.postDelayed(this, 25);
        } else {
            c.remove();
            reset();
            c = mMap.addCircle(co);
            h.postDelayed(this, 2000);
        }

       //done
    }
}

关于android - 动画标记谷歌地图如何像 android 中的图像所示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52287760/

相关文章:

google-maps - 使用地址链接到街景 URL?

javascript - 使用 css3 正确显示隐藏元素

ios - 在动画中移动时如何允许触摸 UIButton?

java - 如何使用HTTP-GET连接输入用户名和密码访问API

java - 在android中将图像转换为铅笔素描

android - AlertDialog ONClickListener 不工作

android - 通过 okHttp 套接字发送数据

Python - 根据(谷歌) map 上的坐标获取度数和米数之间的比率

java - 我当前位置附近的城市或城镇

wpf - 从一种样式到另一种样式进行动画处理