2016-06-29 3 views
1

Я создал импульсную анимацию, которая занимает место на карте и непрерывно излучает импульс (круг). Это работает так, как ожидалось. Тем не менее, я бы хотел, чтобы пульс исчез, чем дальше, тем дальше. Любые мысли о том, как достичь этого лучше всего?Android и Google Maps: анимация импульсного импульса

анимация выглядит следующим образом:

mCircle = mMap.addCircle(
      new CircleOptions() 
        .center(mMarker.getPosition()) 
        .strokeWidth(STROKE_WIDTH) 
        .strokeColor(Color.parseColor(DEFAULT_COLOR)) 
        .radius(RADIUS)); 

    mAnimator.setRepeatCount(ValueAnimator.INFINITE); 
    mAnimator.setRepeatMode(ValueAnimator.RESTART); 
    mAnimator.setIntValues(0, 100); 
    mAnimator.setDuration(DURATION); 
    mAnimator.setEvaluator(new IntEvaluator()); 
    mAnimator.setInterpolator(new AccelerateDecelerateInterpolator()); 
    mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      float animatedFraction = valueAnimator.getAnimatedFraction(); 
      mCircle.setRadius(animatedFraction * SIZE); 
     } 
    }); 
    mAnimator.start(); 
+0

Я хочу реализовать подобное решение без сопротивления. Мне нужно показать импульсную анимацию на маркете google. Можете ли вы отправить свое решение, как вы это достигли? Спасибо – Neha

ответ

2

Я не думаю, что вы хотите, может быть достигнуто с помощью прилагаемого Google Maps Shapes.

Мое предложение было бы сделать это с помощью Canvas, Bitmap и Ground Overlay. Вы можете перерисовать некоторую фигуру на холсте в каждом обратном вызове до onAnimationUpdate() и обновить изображение на наземном наложении. Что-то вроде этого:

Init Bitmap/Canvas (Это может быть класс застройщик)

private void init() { 
    mBitmap = Bitmap.createBitmap(MAX_ANIMATION_WIDTH, MAX_ANIMATION_HEIGHT, Bitmap.Config.ARGB_8888); 
    mCanvas = new Canvas(mBitmap); 
} 

Update Bitmap

private void updateCanvas() { 
    // Clear the canvas for new iteration of drawing 
    mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 

    // TODO: determine/update x, y, radius, paint as a function of animation progress 
    // i.e. for a fade effect, set the paint color to a diminishing alpha level 
    mPaint.setColor(mPulseColor); 
    mCanvas.drawCircle(x, y, radius, mPaint); 
} 

Обновление наземного наложения

private void updateOverlay() { 
    mGroundOverlay.setImage(BitmapDescriptorFactory.fromBitmap(mBitmap)) 
} 

Добавить Нулевой Overlay (это run() метод в исходном сообщении)

private void addGroundOverlay() { 
    // Add ground overlay with the bitmap's initial state 
    mGroundOverlay = mMap.addGroundOverlay(new GroundOverlayOptions()); 

    // TODO: Set values for bitmap's initial state 

    // Paint the canvas with the initial state 
    updateCanvas(); 

    // Update the ground overlay 
    updateOverlay(); 

    mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      // Update animation values 
      mPulseColor = Color.RED; // TODO: set color/alpha 

      // Paint canvas with new animation state 
      updateCanvas(); 

      // Update overlay 
      updateOverlay(); 
     } 
    }); 
} 
+0

Очень хорошее решение. Спасибо! – JB2

Смежные вопросы