如何在Android中的谷歌地图上显示波纹动画?

时间:2015-11-20 06:02:55

标签: android google-maps

我正在尝试使用特定的Lat-Lng在google map上设置涟漪动画,请参阅this,其中描述了我想要的内容,我在上面提到的链接但无法在{{1上设置动画}}

到目前为止我尝试的是 -

我的xml代码:

google map

我的Java代码在谷歌地图上发出涟漪:

<com.test.custom.RippleBackground
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/rippleLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        app:rb_color="#0099CC"
        app:rb_duration="5000"        
        app:rb_radius="32dp"
        app:rb_rippleAmount="4"
        app:rb_scale="6" >

        <ImageView
            android:id="@+id/imgMapProfile"
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:layout_centerInParent="true"
            android:src="@drawable/ic_profile_active" />
    </com.test.custom.RippleBackground>

但是位图没有动画效果。请帮忙。非常感谢。

4 个答案:

答案 0 :(得分:10)

对于想要在Google地图中创建涟漪背景的所有人,例如enter image description here

  1. 使用相同的圆圈创建3个GroundOverlay。将图像放入可绘制文件夹
  2. 创造价值动画师
  3. 定期在ValueAnimator中发送3个GroundOverlay 代码如下: 在onCreateView里面
  4.  new Handler().postDelayed(new Runnable() {
                       @Override public void run() {final GroundOverlay groundOverlay11=googleMap.addGroundOverlay(new
            GroundOverlayOptions()
                               .position(latLng, 2000)
                               .transparency(0.5f)
                               .image(BitmapDescriptorFactory.fromResource(R.drawable.krug)));
                        OverLay(groundOverlay11);
                       }
                      }, 0);
    
        new Handler().postDelayed(new Runnable() {
           @Override
           public void run() {
            final GroundOverlay groundOverlay1=googleMap.addGroundOverlay(new GroundOverlayOptions()
                    .position(latLng, 2000)
                    .transparency(0.5f)
                    .image(BitmapDescriptorFactory.fromResource(R.drawable.krug)));
            OverLay(groundOverlay1);
           }
          }, 4000);
    
        new Handler().postDelayed(new Runnable() {
           @Override
           public void run() {
            final GroundOverlay groundOverlay2=googleMap.addGroundOverlay(new GroundOverlayOptions()
                    .position(latLng, 2000)
                    .transparency(0.5f)
                    .image(BitmapDescriptorFactory.fromResource(R.drawable.krug)));
            OverLay(groundOverlay2);
           }
          }, 8000);
    

    Overlay课程:

    public void OverLay(final GroundOverlay groundOverlay){
      vAnimator = ValueAnimator.ofInt(0, 2000);
      int r=99999;
      vAnimator.setRepeatCount(r);
      //vAnimator.setIntValues(0, 500);
      vAnimator.setDuration(12000);
      vAnimator.setEvaluator(new IntEvaluator());
      vAnimator.setInterpolator(new LinearInterpolator());
      vAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
       @Override
       public void onAnimationUpdate(ValueAnimator valueAnimator) {
        float animatedFraction = valueAnimator.getAnimatedFraction();
        Integer i = (Integer) valueAnimator.getAnimatedValue();
        groundOverlay.setDimensions(i);
       }
      });
      vAnimator.start();
     }
    

答案 1 :(得分:0)

有一个Android库可以在谷歌地图上显示涟漪效应。使用此库,只需要2行代码就可以根据您的问题在Google地图上显示连锁效果。 请访问此链接,以便库显示涟漪:https://github.com/aarsy/GoogleMapsRippleEffect

答案 2 :(得分:0)

感谢yeldos我只是修改了他在动画结束时添加淡出效果的代码。

在叠加功能

中添加此行
groundOverlay.setTransparency(animatedFraction);

正好在

之下
groundOverlay.setDimensions(i);

答案 3 :(得分:0)

在综合文件夹中创建文件 sclae_fade.xml

<alpha
    android:duration="1000"
    android:fromAlpha="1.0"
    android:toAlpha="1.0"
    android:repeatCount="infinite"
    android:repeatMode="restart"
    />

在drawable中创建circle_pulse.xml文件

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <solid android:color="#5532a9f3"/>
            <size
                android:width="120dp"
                android:height="120dp"/>
        </shape>
    </item>
    <item>
        <shape android:shape="oval">
            <stroke android:color="@android:color/transparent"
                android:width="30dp"/>
            <solid android:color="#32a9f3"/>
            <size
                android:width="90dp"
                android:height="90dp"/>
        </shape>
    </item>
</layer-list>

现在设置动画

Animation logoMoveAnimation = AnimationUtils.loadAnimation(this, R.anim.scale_fade);
image_view.startAnimation(logoMoveAnimation);