如何在Android中的图像中显示动画标记谷歌地图?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (120)

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

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

怎么能在android中设置这个?

提问于
用户回答回答于

这是圆方法的一个例子 - 首先是代码后面的记录。

半径增长在这里是线性的,但在你的例子中显然是一个不同的函数(它随着它的扩展而变慢)所以你需要使用它。

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

    final Handler h = new Handler();
    h.postDelayed(new Fader(h,c, initialRadius, maxRadius, Color.BLUE, co), 400);
    h.postDelayed(new Fader(h,c, 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
    }
}
用户回答回答于

注意:这不是正确的解决方案,而只是一个解决方法。

在您的布局中,使用Google地图片段和ImageView中心

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/ic_customerlocation" />
    </RelativeLayout>

现在拍摄你想要的动画的gif图像,并将gif图像加载到ImageView使用Glide或其他东西

如果您想知道用户移动地图的位置,您可以使用onCameraIdle()方法获取新位置

 @Override
  public void onCameraIdle() {
    if (mGoogleMap != null ) {
        CameraPosition cameraPosition = mGoogleMap.getCameraPosition();
        LatLng latLng = cameraPosition.target;
     }
  }

扫码关注云+社区

领取腾讯云代金券