Mi solución, atributo personalizado para ImageView:
https://github.com/henrychuangtw/Android-ImageView-hover
Paso 1: declarar-styleable
<declare-styleable name="MyImageViewAttr">
<attr name="hover_res" format="reference" />
</declare-styleable>
Paso 2: ImageView encargo
public class MyImageView extends ImageView {
int resID, resID_hover;
public MyImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyImageViewAttr);
resID_hover = array.getResourceId(R.styleable.MyImageViewAttr_hover_res, -1);
if(resID_hover != -1){
int[] attrsArray = new int[] {
android.R.attr.src
};
TypedArray ta = context.obtainStyledAttributes(attrs, attrsArray);
resID = ta.getResourceId(0 , View.NO_ID);
ta.recycle();
setOnTouchListener(listener_onTouch);
}
array.recycle();
}
public MyImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyImageViewAttr);
resID_hover = array.getResourceId(R.styleable.MyImageViewAttr_hover_res, -1);
if(resID_hover != -1){
int[] attrsArray = new int[] {
android.R.attr.src
};
TypedArray ta = context.obtainStyledAttributes(attrs, attrsArray);
resID = ta.getResourceId(0 , View.NO_ID);
ta.recycle();
setOnTouchListener(listener_onTouch);
}
array.recycle();
}
OnTouchListener listener_onTouch = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
setImageResource(resID_hover);
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
setImageResource(resID);
break;
default:
break;
}
return false;
}
};
}
Paso 3: declarar myattr: xmlns: myattr = "http://schemas.android.com/apk/res-auto "en el diseño xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myattr="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
Paso 4: establecer myattr: hover_res para MyImageView
<dev.henrychuang.component.MyImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
myattr:hover_res="@drawable/icon_home_h"
android:src="@drawable/icon_home"/>
Sabía que podía hacer esto, pero me preguntaba si había una forma integrada de manejar esto. Como dije, sé que en el cajón de la aplicación, los íconos de la aplicación hacen esto. Gracias por tu ayuda. – groomsy
Bueno, es posible establecer el src en su imagen y luego establecer el atributo de fondo en una lista de selectores. Para el estado normal, puede mostrar una transparencia y luego, para seleccionar, puede mostrar el degradado verde. Creo que debería funcionar, pero nunca lo he intentado. –
En realidad, ahora que lo pienso, el cajón de la aplicación utiliza un diseño de cuadrícula.Por lo tanto, cuando tiene una imagen en una cuadrícula, al seleccionarla se resaltará la celda de la cuadrícula. El proyecto de ejemplo de demostraciones de API que viene con el SDK tiene un código de ejemplo para una vista de cuadrícula. –