2016-01-19 21 views
10

facendo animazione circolare su google map utilizzando l'animazione di valutazione, ma l'animazione diventa intermittente e lampeggia continuamente.Animazione del cerchio su google map in android

Ecco un codice,

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

qualcuno mi aiuta a renderlo animazioni fluide senza sfarfallio ..

Grazie

+0

Il tremolio accade su un dispositivo reale o nell'emulatore? – Tasos

+0

@Tasos sia il dispositivo – Jatin

+0

ho dato un'occhiata ai documenti, e hai INFINITO e poi RESTART - RESTART \t Quando l'animazione raggiunge la fine e repeatCount è INFINITO o un valore positivo, l'animazione ricomincia dall'inizio. http://developer.android.com/reference/android/animation/ValueAnimator.html - c'è un motivo per cui continui ad animare i cerchi ?? – Tasos

risposta

4

Questo è un known issue. Una soluzione alternativa sarebbe utilizzare un GroundOverlay anziché un cerchio.
Ecco un esempio:
creare il cerchio:

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

Ora cambiare il vostro animatore a questo:

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: Questo problema has been fixed