2015-09-09 7 views
1

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

Единственный способ, которым я могу это сделать, это реализовать мою собственную анимацию и использовать метод setIcon для изменения значка маркера.

Есть ли другой и идеально лучший способ сделать это?

Я работаю в Xamarin, но при необходимости могу передать Java-код.

+1

технически вы можете использовать 'ObjectAnimator' с, например,' «значок» 'собственность, если Вы имеете' setIcon' метод в 'target' объекта и создать его как следует: 'ObjectAnimator.ofInt (это,« icon », 10, 100)' – pskink

+0

@pskink. Вы правы, это тот подход, с которым я закончил. Отправьте свой комментарий в качестве ответа, и я соглашусь. –

ответ

6

Вы можете попробовать что-то вроде этого

final Marker marker = map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
    final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_temperature_kelvin_black_48dp); 
    final Bitmap target = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
    final Canvas canvas = new Canvas(target); 
    ValueAnimator animator = ValueAnimator.ofFloat(0, 1); 
    animator.setDuration(500); 
    animator.setStartDelay(1000); 
    final Rect originalRect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
    final RectF scaledRect = new RectF(); 
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator animation) { 
      float scale = (float) animation.getAnimatedValue(); 
      scaledRect.set(0, 0, originalRect.right * scale, originalRect.bottom * scale); 
      canvas.drawBitmap(bitmap, originalRect, scaledRect, null); 
      marker.setIcon(BitmapDescriptorFactory.fromBitmap(target)); 
     } 
    }); 
    animator.start(); 
1

Да, вы правы, нет прямого метода для этого. Вместо этого вы можете использовать обработчик, который будет вызван после того, как скажет каждые 500 мс и в котором вы можете установитьIcon маркера.

Используйте эту ссылку для справки; How to animate marker in android map api V2?

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