2016-01-19 20 views
10

robienie animacji okręgu na mapie google przy użyciu animacji wartości, ale animacja migocze i miga cały czas.Animacja okręgu na mapie google w Androidzie

Oto kod,

CircleOptions circleOptions = new CircleOptions() 
       .center(searchStopPoint) //set center 
       .radius(100) //set radius in meters 
       .strokeColor(Color.TRANSPARENT) 
       .fillColor(0x555751FF) 
       .strokeWidth(5); 

    busStopCircle = googleMap.addCircle(circleOptions); 
    ValueAnimator valueAnimator = new ValueAnimator(); 
    valueAnimator.setRepeatCount(ValueAnimator.INFINITE); 
    valueAnimator.setRepeatMode(ValueAnimator.RESTART); 
    valueAnimator.setIntValues(0, 100); 
    valueAnimator.setDuration(3000); 
    valueAnimator.setEvaluator(new IntEvaluator()); 
    valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); 
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      float animatedFraction = valueAnimator.getAnimatedFraction();    
      busStopCircle.setRadius(animatedFraction * 100); 
     } 
    }); 

    valueAnimator.start(); 

Czy ktoś pomaga mi, aby ją gładką animację bez migotania ..

Dzięki

+0

Migotanie dzieje na prawdziwym urządzeniu lub w emulatorze? – Tasos

+0

@ Tasos zarówno urządzenie – Jatin

+0

miałem spojrzeć na dokumenty, i masz INFINITE, a następnie RESTART - RESTART \t Gdy animacja osiągnie koniec i repeatCount jest INFINITE lub wartość dodatnia, animacja uruchamia się ponownie od początku. http://developer.android.com/reference/android/animation/ValueAnimator.html - jakikolwiek powód, dla którego nadal animujesz kręgi? – Tasos

Odpowiedz

4

To known issue. Jednym z obejść byłoby użycie zamiast kręgu GroundOverlay.
Oto próbka:
Tworzenie okręgu:

// The drawable to use for the circle 
    GradientDrawable d = new GradientDrawable(); 
    d.setShape(GradientDrawable.OVAL); 
    d.setSize(500,500); 
    d.setColor(0x555751FF); 
    d.setStroke(5, Color.TRANSPARENT); 

    Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth() 
      , d.getIntrinsicHeight() 
      , Bitmap.Config.ARGB_8888); 

    // Convert the drawable to bitmap 
    Canvas canvas = new Canvas(bitmap); 
    d.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    d.draw(canvas); 

    // Radius of the circle 
    final int radius = 100; 

    // Add the circle to the map 
    final GroundOverlay circle = map.addGroundOverlay(new GroundOverlayOptions() 
    .position(searchStopPoint, 2 * radius).image(BitmapDescriptorFactory.fromBitmap(bitmap))); 

teraz zmienić swoje animator do tego:

ValueAnimator valueAnimator = new ValueAnimator(); 
    valueAnimator.setRepeatCount(ValueAnimator.INFINITE); 
    valueAnimator.setRepeatMode(ValueAnimator.RESTART); 
    valueAnimator.setIntValues(0, radius); 
    valueAnimator.setDuration(3000); 
    valueAnimator.setEvaluator(new IntEvaluator()); 
    valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); 
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      float animatedFraction = valueAnimator.getAnimatedFraction(); 
      circle.setDimensions(animatedFraction * radius * 2); 
     } 
    }); 

    valueAnimator.start(); 

UPDATE: ten problem has been fixed