【问题标题】:Pulsing animation of markers on map for AndroidAndroid 地图上标记的脉冲动画
【发布时间】:2016-04-06 16:55:19
【问题描述】:

我正在开发 Android 项目并尝试为这样的标记实现脉冲效果: https://github.com/TransitApp/SVPulsingAnnotationView

但我遇到了谷歌地图不支持标记动画的问题。

您知道如何在 Android 上实现它吗? 也许我应该为地图使用另一个库?

【问题讨论】:

标签: android google-maps google-maps-markers


【解决方案1】:

我用这个,有些闪烁,但没有更好的找不到

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

【讨论】:

    【解决方案2】:

    试试这个 pass map 和 position latlng to this function 添加脉冲/波纹动画到地图标记 kotlin 函数

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 2020-09-26
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多