RippleAnimation.java

package org.silverpeas.mobile.client.common.animation;

import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.SpanElement;
import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.user.client.ui.Widget;

public class RippleAnimation {

    public static void play(ClickEvent event, int duration) {
        Element element = ((Widget) event.getSource()).getElement();
        SpanElement ripple = Document.get().createSpanElement();
        ripple.addClassName("ripple");
        element.appendChild(ripple);

        int x = event.getClientX() - element.getOffsetLeft();
        int y = event.getClientY() - element.getOffsetTop();
        ripple.getStyle().setLeft(x, Style.Unit.PX);
        ripple.getStyle().setRight(y, Style.Unit.PX);

        Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
            @Override
            public boolean execute() {
                ripple.removeFromParent();
                return false;
            }
        }, duration);
    }

}