Sélecteur de vue de liste avec fond coloré et effet d’ondulation

Le sélecteur standard de ListView dans l’aperçu d’android de développeur utilise colorControlHighlight pour l’effet d’ondulation au toucher et a un arrière-plan transparent dans l’état non focalisé.

Je voudrais définir un élément ListView qui a un arrière-plan coloré et montre toujours l’effet d’ondulation au toucher avec la même couleur de surbrillance. Maintenant, si je définis le dessin suivant:

    

Cela fonctionne, mais l’ondulation commence au milieu de l’élément ListView , quelle que soit la position tactile. Si j’utilise le même arrière-plan en dehors de ListView , par exemple pour un LinearLayout , cela fonctionne comme prévu (l’ondulation commence à la position tactile).

J’ai réussi à obtenir des éléments de liste colorés individuellement tout en conservant l’effet d’entraînement. Définissez l’arrière-plan de vos éléments de liste à l’aide de l’adaptateur que vous avez et définissez la vue en liste pour afficher le sélecteur en haut:

  

Cela attirera l’effet d’entraînement au-dessus de l’arrière-plan.

Autant que je sache, ce bug est uniquement dans Android 5.0, et non 5.1. L’astuce semble être d’utiliser Drawable # setHotspot en tant que dev de Google pour vous guider ici https://twitter.com/crafty/status/561768446149410816 (parce que les indications obscures de twitter sont une excellente forme de documentation!)

Supposons que vous ayez une disposition en lignes comme celle-ci

   .... content here .....   

Les suivants ont fonctionné pour moi

  row.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.findViewById(R.id.row_content) .getBackground() .setHotspot(event.getX(), event.getY()); return(false); } }); 

J’ai constaté que cela ne semble fonctionner correctement que si vous appliquez l’arrière-plan à l’élément racine de l’élément de liste.

En outre, envisagez d’utiliser le nouveau RecyclerView au lieu d’un ListView

Exemple de vue d’élément de liste:

     

J’ai adapté la réponse de @ArhatBaid un peu, je l’ai testée et cela fonctionne parfaitement:

    

Ainsi, cela vous permet de définir une couleur de fond et d’avoir toujours l’effet d’entraînement.
pour moi cible et minSdk sont 21.

Exemple de disposition, qui contient l’effet Ripple en tant qu’Arrière-plan de la présentation parente.

       

Ripple_effect.xml Ici vous pouvez utiliser n’importe quelle couleur de votre choix. Assurez-vous que vous utilisez sdk version 21 et que vous avez un dossier drawable-v21 et style-v21 et y mettez tous les fichiers liés à v21.

       

Ici, vous pouvez utiliser différentes formes comme un rectangle au lieu d’un ovale …

Vous pouvez y parvenir avec une disposition nestede. Il vous suffit de créer, par exemple, une représentation racine LinearLayout autour de votre mise en page existante, de définir l’effet d’ondulation sur la disposition racine et votre couleur d’arrière-plan sur la disposition nestede.