У меня есть GridView для отображения некоторых объектов, и визуально каждый из объектов будет иметь значок изображения и текстовую метку. Я также хочу, чтобы значок изображения имел эффект "толчок и поп" при нажатии, то есть при нажатии изображение будет перемещаться на небольшое расстояние в нижнем правом направлении, а при отпускании вернется в исходное положение.
Объекты (и их значки изображений) относятся к некоторым динамическим источникам. Моя интуиция заключается в создании StateListDrawable для каждого элемента, который будет иметь два состояния: нажатие или нет. Для представления элемента GridView я бы использовал кнопку, которая может разместить Drawable и ярлык, который отлично удовлетворяет моему требованию.
Я определил класс элемента для обертывания исходного объекта:
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;
}
}
Теперь проблема заключается в том, что когда я касаюсь элемента сетки, значок "движется" совершенно так, как я ожидал, но он не восстанавливает свое исходное положение, когда мой палец поднимается, покидая элемент.
Мой вопрос: как программно создать эквивалент StateListDrawable для одного завышенного из XML-ресурса, например
<?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>
?