Question

Si je mets mon ImageView être à la fois cliquable et focalisable, il fonctionne, mais je n'ai aucun moyen de savoir quelle image se concentre. Quelle est la meilleure façon de l'obtenir pour dessiner une bordure orange autour de la vue afin que l'utilisateur sait qu'il est actuellement mise au point?

J'ai essayé la laisser tomber dans un LinearLayout et la mise que pour être focalisable et cliquable à la place, mais il n'a pas eu de chance. Même quand je mets une marge sur elle, il n'y a rien pour indiquer qu'il a été sélectionné.

Était-ce utile?

La solution

Vous pouvez utiliser un drawable avec un sélecteur en arrière-plan.

Par exemple, j'ai gallery_image_bg.xml dans res / drawable:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:constantSize="true">
  <item android:state_selected="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item android:state_pressed="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item>
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#FFF"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
</selector>

Cela crée trois lignes de 3DP différentes couleurs autour de l'image. Ils sont visibles parce que les forces de remplissage l'image pour rendre dans une zone légèrement plus petite.

Utilisé dans le code comme ceci:

image.setBackgroundResource(R.drawable.gallery_image_bg)

Autres conseils

La solution rapide est d'utiliser un écouteur, qui répondra au clic, et définir une bordure orange sur le imageView ...

imageView.setOnClickListener(listener)

Mais vous devez le faire pour tous les éléments ImageView. Au moins, ils peuvent partager le même auditeur.

La solution à long est de mettre en œuvre votre propre point de vue, l'extension ImageView, qui tire sa propre frontière orange en réponse à un clic.

Je suppose que vous voulez que cela fonctionne comme des boutons radio, où en cliquant sur un ImageView supprimera la frontière du ImageView sélectionné précédemment? Vous aurez donc besoin de l'auditeur partagé pour maintenir une référence à l'ImageView actuellement sélectionné, qui peut alors être « dé-sélectionné » lorsque l'utilisateur clique une nouvelle ImageView.

réponse tardive, mais vous pouvez également utiliser un LayerDrawable pour la source d'image. Ensuite, vous n'avez pas mess avec l'arrière-plan, rembourrage, etc.

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top