Frame By Frame Animation: Frame by frame animation is an animation in which sequence of images replaces on image view.
This animation supports on image view in android.

Problem: How to do same animation on google map location marker ?

Impediment: addMarker() method of GoogleMap can not replace icon on existing marker.

Solution: To resolve this we can use setIcon() method of Marker Class which allows to replace icon over existing marker.
Let’s have a look at the code snippet for animation.

Handler handler = new Handler();
public static int intMarkerNumber = 1;

public final int REPEAT_SECONDS = 91;
//33 images will replace in total 3 seconds on current location animation.

public void markerAnimation(final Marker marker) {

    handler.postDelayed(new Runnable() {
        public void run() {

            try {
                switch (intMarkerNumber) {

                    case 1:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_1));
                        ++intMarkerNumber;
                        break;
                    case 2:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_2));
                        ++intMarkerNumber;
                        break;
                    case 3:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_3));
                        ++intMarkerNumber;
                        break;
                    case 4:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_4));
                        ++intMarkerNumber;
                        break;
                    case 5:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_5));
                        ++intMarkerNumber;
                        break;
                    case 6:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_6));
                        ++intMarkerNumber;
                        break;
                    case 7:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_7));
                        ++intMarkerNumber;
                        break;
                    case 8:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_8));
                        ++intMarkerNumber;
                        break;
                    case 9:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_9));
                        ++intMarkerNumber;
                        break;
                    case 10:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_10));
                        ++intMarkerNumber;
                        break;
                    case 11:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_11));
                        ++intMarkerNumber;
                        break;
                    case 12:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_12));
                        ++intMarkerNumber;
                        break;
                    case 13:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_13));
                        ++intMarkerNumber;
                        break;
                    case 14:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_14));
                        ++intMarkerNumber;
                        break;
                    case 15:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_15));
                        ++intMarkerNumber;
                        break;
                    case 16:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_16));
                        ++intMarkerNumber;
                        break;
                    case 17:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_17));
                        ++intMarkerNumber;
                        break;
                    case 18:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_18));
                        ++intMarkerNumber;
                        break;
                    case 19:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_19));
                        ++intMarkerNumber;
                        break;
                    case 20:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_20));
                        ++intMarkerNumber;
                        break;
                    case 21:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_21));
                        ++intMarkerNumber;
                        break;

                    case 22:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_22));
                        ++intMarkerNumber;
                        break;
                    case 23:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_23));
                        ++intMarkerNumber;
                        break;
                    case 24:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_24));
                        ++intMarkerNumber;
                        break;
                    case 25:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_25));
                        ++intMarkerNumber;
                        break;
                    case 26:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_26));
                        ++intMarkerNumber;
                        break;
                    case 27:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_27));
                        ++intMarkerNumber;
                        break;

                    case 28:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_28));
                        ++intMarkerNumber;
                        break;
                    case 29:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_29));
                        ++intMarkerNumber;
                        break;
                    case 30:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_30));
                        ++intMarkerNumber;
                        break;
                    case 31:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_31));
                        ++intMarkerNumber;
                        break;
                    case 32:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_32));
                        ++intMarkerNumber;
                        break;
                    default:
                        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.anim_33));
                        intMarkerNumber = 1;
                        break;
                }

            } catch (Exception e) {
        e.printStackTrace();
            }
            handler.postDelayed(this, REPEAT_SECONDS);

        }
    }, REPEAT_SECONDS);
}


//Note: Don't forget to removeCallback of Handler while leaving activity.
handler.removeCallbacksAndMessages(null);

 

You may also like

Leave a Reply