web-dev-qa-db-fra.com

Implémentation de l'effet d'entraînement en dehors d'ImageButton

J'essaie d'implémenter l'effet d'entraînement pour ImageButton.J'ai défini l'ondulation en arrière-plan et l'image dessinable dans le src pour cela.

Android:background="@drawable/myripplexml"
Android:src="@drawable/myimagepath"

Son effet d'entraînement agréable à l'intérieur de la disposition des boutons. Mais je veux que l'effet Ripple s'étende également en dehors de la disposition des boutons.Une autre façon de le faire est d'utiliser:

 Android:background="?android:attr/selectableItemBackgroundBorderless"

Mais il utilise la couleur et le style par défaut. Comment puis-je le personnaliser en ce qui concerne la couleur, la forme et sa taille?

29
Chaitanya Pimparkar

Je suis tombé sur cela et mon problème est que "selectableItemBackgroundBorderless" crée un rectangle, alors que mon bouton était circulaire. Je ne sais pas si cela répond à la question d'origine, mais voici ce que j'ai trouvé: définir l'arrière-plan de ceci dans drawable-v21

<ripple
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:color="?android:colorControlHighlight">
    <item Android:id="@Android:id/mask">
        <shape Android:shape="oval">
            <solid Android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

et @null dans les niveaux d'api inférieurs (en supposant que vous utilisez un sélecteur pour le bouton d'image réel src). L'ondulation la plus visible dans le rembourrage du bouton. S'il n'y a pas de couche de masquage, l'ondulation n'est pas liée et prend le contrôle de tout l'écran. Vous pouvez utiliser la forme que vous voulez si ce n'est pas un cercle.

19
Travis Castillo

Si vous êtes paresseux comme moi, utilisez l'ondulation par défaut et oubliez la compatibilité descendante. Fondamentalement, il existe deux types d'ondulation d'arrière-plan que vous pouvez ajouter à vos vues:

 ?android:selectableItemBackground // Ripple within view
 ?android:selectableItemBackgroundBorderless //Ripple outside view

Malheureusement, ces ondulations sont toujours de couleur grise. Pour les modifier en fonction de votre thème, accédez à votre thème parent et modifiez le colorControlHighlight.

Dans le thème principal de votre application:

<item name="colorControlHighlight">#1bff3a</item>

Cette valeur changera la couleur de l'ondulation par défaut.

Remarque: sur les appareils inférieurs à 21, l'ondulation se transformera en sélecteurs notmals de la même couleur que vous avez définie.

10
amalBit

Tout comme @alan mentionné dans son commentaire. Si vous créez un élément d'ondulation sans masque et aucun élément enfant et que vous l'ajoutez en tant qu'arrière-plan des vues, l'ondulation sera dessinée au-dessus du premier parent disponible et pourra étendre les limites des vues. Ceci est mentionné dans le doc

<!-- An unbounded red ripple. --/>
<ripple Android:color="#ffff0000" />
9
guy.gc