2016-01-19 15 views
10

valu animasyon kullanarak google harita üzerinde daire animasyon yapıyor ama animasyon her zaman yanıp sönüyor ve yanıp sönüyor. İşte Android'de google harita üzerinde daire animasyon

..

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

Can kimse titreyen olmadan bunu düzgün animasyon yapmak için yardımcı oluyor,

Teşekkür

+0

titreme gerçek cihazda olur Bu sorunu
çevre oluştur:
Aşağıda örnek var veya emülatörde? – Tasos

+0

@Tasos cihazında hem – Jatin

+0

hem de dokümanlar vardı ve INFINITE ve sonra RESTART - RESTART \t RESTART var. Animasyon sonuna ulaştığında ve repeatCount INFINITE veya pozitif bir değer olduğunda, animasyon en baştan yeniden başlar. http://developer.android.com/reference/android/animation/ValueAnimator.html - neden çevreleri hareketlendirmeye devam etmektesiniz? – Tasos

cevap

4

Bu known issue bir koddur. Bir geçici çözüm, bir daire yerine GroundOverlay kullanmak olacaktır.

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

Şimdi bu şekilde animatör değiştirin::

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

İlgili konular