【问题标题】:How can animated marker google map like shown in image in android?如何在 android 中显示动画标记谷歌地图?
【发布时间】:2018-09-12 05:01:43
【问题描述】:

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

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

如何在android中设置这个?

【问题讨论】:

  • 标记会一直在地图的中心吗?
  • 是的标记已经修复了 lantlong @Redman
  • 如果标记总是在中心,那么使用这个技巧。在谷歌地图上使用 ImageView 并将 gif 显示为动画。
  • 你能举个例子吗?谢谢@Redman

标签: android google-maps animation


【解决方案1】:

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

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

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
    }
}

【讨论】:

    【解决方案2】:

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

    在你的布局中使用谷歌地图片段和一个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 图像,然后使用 Glide 或其他方式将 gif 图像加载到 ImageView 中

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2017-07-17
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      相关资源
      最近更新 更多