Comment définir un effet d'entraînement sur textview ou imageview sur Android?


127

Je souhaite définir un effet d'entraînement sur la vue textuelle et la vue image dans Android Studio. Comment puis-je le faire?


1
Veuillez d'abord élaborer votre question. De quoi avez-vous réellement besoin et qu'avez-vous essayé jusqu'à présent. Simplement dire que je veux un effet d'entraînement en fait une question très large. Vous pouvez également donner un lien pour référence à ce que vous voulez. Voir également stackoverflow. com / help / how-to-ask
Anirudh Sharma

En fait, je veux un effet pour l'effet de sélection / désélection de vue de texte et de vue d'image.
Vasant

avez-vous essayé de rechercher la même chose?
Anirudh Sharma

Réponses:


277

Réf: http://developer.android.com/training/material/animations.html ,

http://wiki.workassis.com/category/android/android-xml/

<TextView
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>

<ImageView
.
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>

2
nice son a fonctionné avec moi sur sucette, mais de cette façon pour quelle version android android? et ça marche sur pré-sucette?
Basheer AL-MOMANI

2
@Richard J'ai eu un problème avec KitKat (ou ICS) il y a un an, et les écouteurs de clics ne fonctionnaient pas sans Android: clickable = "true" pour cette version
DoruChidean

25
Sur les versions modernes d'Android, c'est maintenantandroid:background="?android:attr/selectableItemBackground"
tmm1

2
Comment puis-je l'utiliser lorsque je veux un arrière-plan personnalisé?
mrid

3
La différence entre cela avec / sans Borderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt

82

Si vous voulez que l'ondulation soit limitée à la taille de TextView / ImageView, utilisez:

<TextView
android:background="?attr/selectableItemBackground"
android:clickable="true"/>

(Je pense que ça a l'air mieux)


2
Y a-t-il une différence dans l'utilisation de selectableItemBackgroundvsselectableItemBackgroundBorderless
rakesh kashyap

Je ne sais pas pourquoi il n'était pas limité aux frontières et qu'il s'étendait sur toute la mise en page
VSB

4
@rakeshkashyap la différence est que selectableItemBackground gardera l'ondulation dans sa taille de vue (largeur / hauteur). selectableItemBackgroundBorderless étendra son ondulation sur d'autres vues (comme l'ondulation officielle de l'application de calculatrice)
Tudor

1
et également besoin de définir ce >>> android: focusable = "true"
Amos

Utile. Merci.
Pooja il y a

25

Veuillez vous référer à la réponse ci-dessous pour l'effet d'entraînement.

ondulation sur Textview ou View:

android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackgroundBorderless"

ondulation sur Button ou Imageview:

android:foreground="?android:attr/selectableItemBackgroundBorderless"

4
Veuillez noter qu'il selectableItemBackgroundBorderlesss'agit de l'API 21+. Ci-dessous, vous pouvez choisir selectableItemBackgroundd'éviter les problèmes de compatibilité
StevenTB

10

Vous pouvez utiliser android-ripple-background

Effet de départ

final RippleBackground rippleBackground=(RippleBackground)findViewById(R.id.content);
ImageView imageView=(ImageView)findViewById(R.id.centerImage);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        rippleBackground.startRippleAnimation();
    }
});

Arrêter l'animation:

rippleBackground.stopRippleAnimation();

agréable! existe-t-il une version Kotlin de cela?
rengineer

8
<TextView
            android:id="@+id/txt_banner"
            android:layout_width="match_parent"
            android:text="@string/banner"
            android:gravity="center|left"
            android:layout_below="@+id/title"
            android:background="@drawable/ripple_effect"
            android:paddingLeft="15dp"
            android:textSize="15sp"
            android:layout_height="45dp" />

ajouter ceci dans drawable

<?xml version="1.0" encoding="utf-8"?>
<!--this ribble animation only working for >= android version 21-->
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/click_efect" />

essaye ça.



5

En plus des réponses ci-dessus, il est possible de faire la mise au point pour éviter l'avertissement de l'éditeur d'interface

android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"

4

Dans le cas où la solution bien votée publiée par @Bikesh M Annur ( ici ) ne fonctionne pas pour vous, essayez d'utiliser:

<TextView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true" />

<ImageView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true" />

De plus, lorsque vous utilisez android:clickable="true"add android:focusable="true"car:

" Un widget déclaré cliquable mais non déclaré focusable n'est pas accessible via le clavier. "


3

Ajouter android:clickable="true" android:focusable="true"

Pour l'effet d'entraînement

android:background="?attr/selectableItemBackgroundBorderless"

Pour un effet sélectionnable

android:background="?android:attr/selectableItemBackground"

Pour l'effet Button

android:adjustViewBounds="true" style="?android:attr/borderlessButtonStyle"

2

En plus de la réponse de @Bikesh M Annur, assurez-vous de mettre à jour vos bibliothèques de support. Auparavant, j'utilisais 23.1.1 et rien ne s'est passé. La mise à jour vers 23.3.0 a fait l'affaire.


2

pour l'ondulation du cercle: android:background="?attr/selectableItemBackgroundBorderless"

pour l'ondulation du rectangle: android:background="?attr/selectableItemBackground"


1

Ou vous pouvez essayer d'utiliser cette bibliothèque (Android 9+): RippleEffect

L'intégration

dependencies {
    compile 'com.github.traex.rippleeffect:library:1.3'
}

Usage:

<com.andexert.library.RippleView
  android:id="@+id/more"
  android:layout_width="?android:actionBarSize"
  android:layout_height="?android:actionBarSize"
  android:layout_toLeftOf="@+id/more2"
  android:layout_margin="5dp"
  rv_centered="true">

  <ImageView
    android:layout_width="?android:actionBarSize"
    android:layout_height="?android:actionBarSize"
    android:src="@android:drawable/ic_menu_edit"
    android:layout_centerInParent="true"
    android:padding="10dp"
    android:background="@android:color/holo_blue_dark"/>

</com.andexert.library.RippleView>

8
Je l'ai utilisé pendant assez longtemps, mais je ne le recommande plus à moins que vous ne visiez Android 2.3. Il est bogué, lent et produit du code standard. Et comme à l'heure actuelle, 43% de tous les appareils ont Android 5 ou 6, vous pouvez simplement vous en tenir selectableItemBackgroundlorsque vous ciblez Android 4 et supérieur.
0101100101

0

La meilleure façon d'ajouter:

    <ImageView
        android:id="@+id/ivBack"
        style="?attr/actionButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:src="@drawable/ic_back_arrow_black"
        android:tint="@color/white" />

-4

Utilisation des bibliothèques. C'est l' un d'entre eux. Ajoutez simplement sa dépendance et placez le code ci-dessous en xml avant chaque élément nécessitant un effet d'entraînement:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">

4
oh non, ce n'est pas le meilleur moyen car vous en avez moins de contrôle et il est largement pris en charge dans le SDK Android lui-même. Si quelqu'un lit cela, je recommande de regarder le commentaire de @Bikesh ou de Karthik si vous souhaitez contrôler la couleur.
Dion Segijn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.