J'ai imageview dans mon application Android que j'utilise comme un bouton avec l'événement onClick donné, mais comme vous pouvez le deviner, il ne donne pas imageview un effet cliquable quand cliqué. Comment puis-je y parvenir ?
Réponses
Trop de publicités?Vous pouvez le faire avec une seule image en utilisant quelque chose comme ceci :
//get the image view
ImageView imageView = (ImageView)findViewById(R.id.ImageView);
//set the ontouch listener
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
ImageView view = (ImageView) v;
//overlay is black with transparency of 0x77 (119)
view.getDrawable().setColorFilter(0x77000000,PorterDuff.Mode.SRC_ATOP);
view.invalidate();
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: {
ImageView view = (ImageView) v;
//clear the overlay
view.getDrawable().clearColorFilter();
view.invalidate();
break;
}
}
return false;
}
});
Je vais probablement en faire une sous-classe d'ImageView (ou ImageButton car c'est aussi une sous-classe d'ImageView) pour faciliter la réutilisation, mais cela devrait vous permettre d'appliquer un look "sélectionné" à une vue d'image.
Vous pouvez concevoir différentes images pour les états cliqués/non cliqués et les définir dans onTouchListener comme suit :
final ImageView v = (ImageView) findViewById(R.id.button0);
v.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.setImageBitmap(res.getDrawable(R.drawable.img_down));
break;
}
case MotionEvent.ACTION_CANCEL:{
v.setImageBitmap(res.getDrawable(R.drawable.img_up));
break;
}
}
return true;
}
});
Le meilleur choix est de définir un sélecteur comme suit
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@drawable/img_down" />
<item android:state_selected="false"
android:drawable="@drawable/img_up" />
</selector>
et sélectionnez l'image dans l'événement :
v.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
v.setSelected(arg1.getAction()==MotionEvent.ACTION_DOWN);
return true;
}
});
Utilisez style="?android :borderlessButtonStyle" dans le fichier XML. Il affichera l'effet de clic par défaut Android.
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
style="?android:borderlessButtonStyle"
/>