47 votes

Comment mettre en surbrillance ImageView lorsqu'il est focalisé ou cliqué?

Un bon exemple de cela est sur le Twitter de lancement de l'écran (l'écran avec les grandes icônes qui apparaît lorsque l'application est en premier lancement) ou même juste regarder à l'application du bac lorsque vous vous concentrez d'une icône d'application.

Essentiellement, j'ai besoin pour mettre en surbrillance une ImageView où les mettre en évidence les contours de l'image au sein de l'ImageView et ressemble à une bordure à l'image. Je tiens également à personnaliser en surbrillance ont une certaine couleur et fade out.

Merci,

groomsy

87voto

Josh Clemm Points 2166

Vous devez affecter l' src attribut de l' ImageView un état de la liste drawable. En d'autres termes, que la liste d'état aurait une image différente pour certains, pressés, pas de sélection, etc. - c'est la façon dont l'Application Twitter t-il.

Donc, si vous avez eu une ImageView:

<ImageView style="@style/TitleBarLogo"
            android:contentDescription="@string/description_logo"
            android:src="@drawable/title_logo" />

La src drawable (title_logo.xml) devrait ressembler à ceci:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/title_logo_pressed"/>
    <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/title_logo_pressed"/>
    <item android:state_focused="true" android:drawable="@drawable/title_logo_selected"/>
    <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/title_logo_default"/>
</selector>

La Google IO Calendrier d'application est un bon exemple de cela.

2voto

jsidera Points 656

Seulement pour terminer la réponse de Josh Clemm. Vous pouvez également conserver la même image définie par src, mais modifier ou mettre en surbrillance uniquement l'arrière-plan. Cela ressemblerait plus ou moins à ceci:

logo_box.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/background_normal"/>
    <item android:state_pressed="false" android:drawable="@drawable/background_pressed"/>
</selector>
 

Et puis définir l'arrière-plan de votre bouton comme logo_box:

 <ImageView
    android:contentDescription="@string/description_logo"
    android:src="@drawable/logo"
    android:background="@drawable/logo_box" />
 

Où background_normal et background_pressed peuvent être aussi complexes que vous le souhaitez, ou aussi simples qu'un @color :)

2voto

Tom Bollwitt Points 3391

Pour afficher des images dynamiques, vous pouvez utiliser un LayerDrawable pour la source d'image.

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

1voto

Roman Zhilich Points 33

J'ai mis en place une petite bibliothèque qui devrait aider à cela: https://github.com/noveogroup/Highlightify

Fondamentalement, il crée un sélecteur lors de l'exécution et devrait être très facile à utiliser. Cependant, l'état concentré n'est pas encore pris en charge ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X