Как можно анимировать маркер гугл карты, как показано на картинке в Android? - PullRequest
0 голосов
/ 12 сентября 2018

Как я могу добавить этот тип анимации в маркер карты Google в Android?

Если пользователь нажимает на значок в течение более двух секунд, то маркер кликабелен

Как установить это в Android?

enter image description here

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вот пример кругового подхода - сначала запись, за которой следует код.

Рост радиуса здесь линейный, но, очевидно, это другая функция в вашем примере (он замедляется по мере расширения), поэтому выНадо будет поработать с этим.

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
    }
}
0 голосов
/ 12 сентября 2018

ПРИМЕЧАНИЕ: Это не правильное решение, а просто хак для обхода.

В вашем макете возьмите фрагмент карты 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;
     }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...