0

I’m working on Android project and trying implement pulsing effect for markers like this: https://github.com/TransitApp/SVPulsingAnnotationView

But I faced with issue that Google Maps doesn’t have support for marker’s animation.

Are there any idea how it may be implemented on Android? Maybe I should use another library for maps?

2 Answers2

0

I use this, some flickering, but nothing better can not find

Bitmap markerIcon=drawableToBitmap(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_lens_black_24dp, null));
                pulseMarker(markerIcon, 2000);


...


    void pulseMarker(final Bitmap markerIcon, final long onePulseDuration) {
        final Handler handler = new Handler();
        final long startTime = System.currentTimeMillis();
        final Interpolator interpolator = new CycleInterpolator(1f);
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (jumpingMarker!=null /*&& jumpingMarker.isVisible()*/) {
                    long elapsed = System.currentTimeMillis() - startTime;
                    float t = interpolator.getInterpolation((float) elapsed / (float)onePulseDuration);
                    jumpingMarker.setIcon(BitmapDescriptorFactory.fromBitmap(scaleBitmap(markerIcon, 1.0f + 0.75f * t)));
                    handler.postDelayed(this, 100);
                }
            }
        });
    }
djdance
  • 3,110
  • 27
  • 33
0

Try this pass map and position latlng to this function to add pulsing/ripple animation to map marker kotlin Function

fun startPulsatorAnimation(mMap: GoogleMap, latlng: LatLng) {
        var mCircle = mMap.addCircle(
            CircleOptions()
                .center(LatLng(latlng.latitude, latlng.longitude))
                .strokeWidth(2f)
                .strokeColor(Color.parseColor("#449A3E91"))
                .fillColor(Color.parseColor("#229A3E91"))
                .radius(100.0)

        )

        var mAnimator = ValueAnimator()
        mAnimator.setRepeatCount(ValueAnimator.INFINITE)
        mAnimator.setRepeatMode(ValueAnimator.REVERSE)
        mAnimator.setIntValues(1000, 2000)
        mAnimator.setDuration(6000)
        mAnimator.setEvaluator(IntEvaluator())
        mAnimator.setInterpolator(AccelerateDecelerateInterpolator())
        mAnimator.addUpdateListener(ValueAnimator.AnimatorUpdateListener { valueAnimator ->
            val animatedFraction = valueAnimator.animatedFraction
            mCircle.setRadius((animatedFraction * 800).toDouble())
        })
        mAnimator.start()
    }
Aris_choice
  • 392
  • 2
  • 18