2015-11-20 68 views
3

我想使用特定的Lat-Lng在google map上設置漣漪動畫,請參閱this這正是描述我想要的內容,我上面提到的鏈接但無法設置動畫google map如何在Android中的谷歌地圖上顯示漣漪動畫?

我試了一下,到目前爲止是 -

我的XML代碼:

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

我的Java代碼放置紋波谷歌地圖:

LatLng currentAddressLatLong;    
         currentAddressLatLong = new LatLng(gps.getLatitude(), gps.getLongitude()); 

        RippleBackground rippleLayout=(RippleBackground)findViewById(R.id.rippleLayout); 
        rippleLayout.setVisibility(View.VISIBLE); 
        ImageView imgMapProfile=(ImageView)findViewById(R.id.imgMapProfile); 

        Bitmap markerUserBitmap = Comman.createDrawableFromView(NearByActivity.this, rippleLayout); 
        googleMap.addMarker(new MarkerOptions().position(currentAddressLatLong).icon(BitmapDescriptorFactory.fromBitmap(markerUserBitmap))); 
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(currentAddressLatLong)); 
        googleMap.animateCamera(CameraUpdateFactory.zoomTo(11)); 

        rippleLayout.startRippleAnimation(); 

    // Convert a view to bitmap function 
      public static Bitmap createDrawableFromView(Context context, View view) 
      { 
       DisplayMetrics displayMetrics = new DisplayMetrics(); 
       ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
       view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
       view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels); 
       view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels); 
       view.buildDrawingCache(); 
       Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

       Canvas canvas = new Canvas(bitmap); 
       view.draw(canvas); 

       return bitmap; 
      } 

但位圖是沒有得到動畫。請幫忙。非常感謝。

+0

我認爲,佈局應覆蓋在谷歌地圖上,我發現這個庫是用延伸'RelativeLayout',它至少應該有'FrameLayout'來完成覆蓋。 – bjiang

回答

7

對於大家誰願意在谷歌地圖創建波動的背景是這樣enter image description here

  1. 創建3的GroundOverlay與同一個圓上。把圖像中繪製文件夾
  2. 創造價值動畫
  3. 送3的GroundOverlay在ValueAnimator定期 下面的代碼: 內onCreateView
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); 

和覆蓋類:

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(); 
} 
+0

有沒有辦法讓脈衝動畫獨立於地圖的縮放級別?如果我放大地圖動畫放大以及 – Neha

0

有一個android庫來顯示谷歌地圖上的漣漪效應。使用這個庫,只需要2行代碼就可以根據你的問題顯示谷歌地圖上的漣漪效應。 請訪問這個鏈接爲圖書館顯示漣漪:https://github.com/aarsy/GoogleMapsRippleEffect

+1

我試過這個庫。對於許多設備來說,它不起作用,並給出「內存不足的例外」。這似乎是圖書館正在進行的一個問題。 – user2924127

0

感謝yeldos我只是modfiy他的代碼添加淡出效果在動畫結束。

覆蓋函數中添加此行

groundOverlay.setTransparency(animatedFraction); 

略低於

groundOverlay.setDimensions(i);