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?

Vasant
la source
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"
/>
Bikesh M
la source
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)

Micro
la source
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"
Vasant
la source
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();
IntelliJ Amiya
la source
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.

Karthik Sridharan
la source
6

essaye ça. Cela a fonctionné pour moi.

android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground"
Juboraj Sarker
la source
1
J'ai déjà mentionné cela avant ( stackoverflow.com/a/50347848/1954960 ) donc au lieu de provoquer une réponse en double, merci de regarder ma réponse, merci! :)
Zafer Celaloglu
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"
Zafer Celaloglu
la source
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. "

Filipe Brito
la source
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"
silver_hawk
la source
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.

Mark Pazon
la source
2

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

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

Bita Mirshafiee
la source
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>
walkmn
la source
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" />
Jack
la source
-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">
Amirhossein Naghshzan
la source
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