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>
?