2010-10-07 26 views
1

Si je définis que mon ImageView est à la fois cliquable et focalisable, cela fonctionne, mais je n'ai aucun moyen de savoir quelle image est mise au point. Quelle est la meilleure façon de l'obtenir pour dessiner une bordure orange autour de la vue afin que l'utilisateur sache qu'il est actuellement au point?Mise en page Android - ImageView focalisé, mais n'affiche rien à l'écran (pas de surbrillance)

J'ai essayé de le déposer dans un LinearLayout et de le paramétrer pour qu'il soit focalisable et cliquable à la place, mais il n'a pas eu de chance. Même lorsque je mets une marge dessus, rien n'indique qu'il a été sélectionné.

Répondre

6

Vous pouvez utiliser un dessin avec un sélecteur comme 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 3DP différentes couleurs autour de l'image. Ils sont visibles car le rembourrage force l'image à se rendre dans une zone légèrement plus petite.

utilisé dans le code comme ceci:

image.setBackgroundResource(R.drawable.gallery_image_bg) 
+0

Si vous aimez la réponse, s'il vous plaît envisager de le vérifier. –

0

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 longue consiste à implémenter votre propre View, en étendant ImageView, qui dessine sa propre bordure orange en réponse à un clic. Je suppose que vous voulez que cela fonctionne comme des boutons radio, en cliquant sur un ImageView va supprimer la bordure de l'ImageView précédemment sélectionné? Vous aurez donc besoin de l'écouteur partagé pour conserver une référence à l'ImageView actuellement sélectionnée, qui peut ensuite être "désélectionnée" quand un nouvel ImageView est cliqué.

+0

J'ai le clic qui fonctionne OK, c'est la mise au point qui est le problème que j'ai besoin d'aide. Quand il est focalisé, il n'y a aucune indication de quelle image a le focus. Vous ne pouvez pas le dire, car l'interface utilisateur ne change pas. Je pourrais setOnFocusListener, mais des suggestions sur la façon de dessiner une boîte orange autour de mon image? –

0

réponse tardive, mais vous pouvez également utiliser un LayerDrawable pour la source d'image. Ensuite, vous n'avez pas à jouer avec le fond, le rembourrage, etc

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)}); 
imageView.setImageDrawable(d);