0

J'essaie d'implémenter un effet d'entraînement dans mon application grâce au fichier xml personnalisé que j'ai créé dans un dessinable. À l'heure actuelle, il fonctionne uniquement avec les appareils exécutant Marshmallow et au-dessus non sur sucette (api 21 & api 22). Voici le fichier XML personnalisé.Effet d'ondulation ne fonctionne pas sur lollipop, mais fonctionne sur guimauve et au-dessus

res/drawable-v21/ripple_effect.xml

<?xml version="1.0" encoding="utf-8"?> 
    <ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:color="#ff0000" 
    tools:targetApi="LOLLIPOP"> 
<item android:id="@android:id/mask"> 
    <shape android:shape="rectangle"> 
     <solid android:color="#ff0000" /> 
    </shape> 
</item> 

Et ceci est mon principal xml d'activité

layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@null" 
    android:clickable="true" 
    android:foreground="@drawable/ripple_effect" 
    android:src="@drawable/background3360" /> 

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#333" 
    android:foreground="@drawable/ripple_effect" 
    android:text="This is a Button" 
    android:textColor="#fff" /> 

</LinearLayout> 

Maintenant, après le lancement, je peux voir clairement un effet d'entraînement (couleur rouge) sur l'imageVoir et sur le bouton, mais sur les appareils à sucettes, je ne vois pas cet effet. Ma supposition est, c'est à cause de android:foreground, il est en quelque sorte pas reconnu dans les mises en page autres que framelayout en sucette. Au-dessus de la sucette android:foreground fonctionne très bien avec chaque mise en page/vue. Je veux mettre en œuvre cet effet d'ondulation personnalisé dans ce linearlayout et sur le imageView et dans les dispositifs de sucette via xml seulement.

+0

Vous avez raison, Android: premier plan ne sont pas pris en charge pour les vues standard dans la plupart des versions Android. Toutefois, vous pouvez créer un ImageView personnalisé qui prend en charge cet attribut, ou vous pouvez envelopper votre ImageView dans un FrameLayout qui le prend en charge. – BladeCoder

Répondre

0

ajouter android:background="?android:attr/selectableItemBackground" dans votre LinearLayout

+0

Merci d'avoir répondu. Cela applique simplement l'effet d'entraînement par défaut à l'ensemble de la mise en page. Je veux mon propre effet d'entraînement personnalisé. –