Android: Como criar um StateListDrawable programaticamente

Eu tenho um GridView para exibir alguns objetos e, visualmente, cada um deles terá um ícone de imagem e um rótulo de texto. Também quero que o ícone da imagem tenha algum efeito de "empurrar e pop" quando clicado, ou seja, quando pressionado, a imagem se moverá uma pequena distância para a direção inferior direita e, quando liberada, voltará à sua posição original.

Os objetos (e seus ícones de imagem) são de algumas fontes dinâmicas. Minha intuição é criar um StateListDrawable para cada item, que terá dois estados: pressionado ou não. Para a visualização do item do GridView, eu usaria um botão, que pode acomodar um Drawable e um rótulo, que satisfaz perfeitamente minha exigênci

Definei uma classe de item para agrupar o objeto original:

public class GridItem<T> {

    public static final int ICON_OFFSET = 4;

    private StateListDrawable mIcon;
    private String mLabel;
    private T mObject;

    public Drawable getIcon() {
        return mIcon;
    }

    public void setIcon(Drawable d) {
        if (null == d) {
            mIcon = null;
        }else if(d instanceof StateListDrawable) {
            mIcon = (StateListDrawable) d;
        } else {
            InsetDrawable d1 = new InsetDrawable(d, 0, 0, ICON_OFFSET, ICON_OFFSET);
            InsetDrawable d2 = new InsetDrawable(d, ICON_OFFSET, ICON_OFFSET, 0, 0);
            mIcon = new StateListDrawable();
            mIcon.addState(new int[] { android.R.attr.state_pressed }, d2);
            mIcon.addState(StateSet.WILD_CARD, d1);
            //This won't help either: mIcon.addState(new int[]{}, d1);
        }
    }

    public String getLabel() {
        return mLabel;
    }

    public void setLabel(String l) {
        mLabel = l;
    }

    public T getObject() {
        return mObject;
    }

    public void setObject(T o) {
        mObject = o;
    }

}

Agora, o problema é que, quando toco em um item da grade, o ícone "se move" exatamente como eu esperava, mas ele não restaura sua posição original quando meu dedo levanta, deixando o ite

inha pergunta é: como criar programaticamente um StateListDrawable equivalente a um inflado de um recurso XML como

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/image_pressed" />  
    <item android:drawable="@drawable/image_normal" />
</selector>

?

questionAnswers(3)

yourAnswerToTheQuestion