Ich versuche, eine CardView dazu zu bringen, den Welligkeitseffekt anzuzeigen, wenn sie berührt wird, indem das Attribut android: backgound in der Aktivitäts-XML-Datei festgelegt wird, wie hier auf der Seite für Android-Entwickler beschrieben, aber es funktioniert nicht. Überhaupt keine Animation, aber die Methode in onClick wird aufgerufen. Ich habe auch versucht, eine ripple.xml-Datei zu erstellen, wie hier vorgeschlagen , aber das gleiche Ergebnis.
Die CardView, wie sie in der XML-Datei der Aktivität angezeigt wird:
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="155dp"
android:layout_height="230dp"
android:elevation="4dp"
android:translationZ="5dp"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:onClick="showNotices"
android:background="?android:attr/selectableItemBackground"
android:id="@+id/notices_card"
card_view:cardCornerRadius="2dp">
</android.support.v7.widget.CardView>
Ich bin relativ neu in der Android-Entwicklung, daher habe ich möglicherweise ein paar offensichtliche Fehler gemacht.
Danke im Voraus.
android
android-layout
android-5.0-lollipop
android-cardview
AkraticCritic
quelle
quelle
?android:attr/selectableItemBackground
erfordert API Level 11android:clickable="true"
.Fügen Sie diesen zweizeiligen Code in Ihre XML-Ansicht ein, um einen Welleneffekt auf Ihre cardView zu erzielen.
quelle
foreground
funktioniert mit benutzerdefinierten Hintergrundansichten wie ein Zauber! Nett!Ich habe es geschafft, den Welleneffekt auf die Kartenansicht zu bekommen, indem ich:
und für das custom_bg, das Sie im obigen Code sehen können, müssen Sie eine XML-Datei sowohl für Lollipop- (im drawable-v21-Paket) als auch für Pre-Lollipop-Geräte (im Drawable-Paket) definieren. Für custom_bg im drawable-v21-Paket lautet der Code:
Für custom_bg im Zeichenpaket lautet der Code:
Auf Pre-Lollipop-Geräten haben Sie also einen soliden Klick-Effekt und auf Lollipop-Geräten einen Ripple-Effekt auf die Kartenansicht.
quelle
Der Ripple-Effekt wurde in der von Ihnen verwendeten Appcompat-Unterstützungsbibliothek weggelassen. Wenn Sie die Welligkeit sehen möchten, verwenden Sie die Android L-Version und testen Sie sie auf einem Android L-Gerät. Auf der AppCompat v7-Site:
"Warum gibt es vor Lollipop keine Welligkeiten? RippleDrawable läuft unter anderem mit dem neuen RenderThread von Android 5.0 reibungslos. Um die Leistung in früheren Android-Versionen zu optimieren, haben wir RippleDrawable vorerst ausgelassen."
Überprüfen Sie diesen Link hier für weitere Informationen
quelle
Wenn die App, an
minSdkVersion
der Sie arbeiten, Stufe 9 ist, können Sie Folgendes verwenden:Ab Stufe 11 verwenden Sie stattdessen:
Aus der Dokumentation:
quelle
Für mich hat das Hinzufügen von
foreground
zuCardView
nicht funktioniert (Grund unbekannt: /)Das gleiche zum untergeordneten Layout hinzuzufügen, hat den Trick getan.
CODE:
quelle
Fügen Sie diese beiden Code-ähnlichen Funktionen wie einen Zauber für jede Ansicht wie Button, Linear Layout oder CardView hinzu. Setzen Sie einfach diese beiden Zeilen und sehen Sie die Magie ...
quelle
Wenn es ein Root-Layout wie RelativeLayout oder LinearLayout gibt, das die gesamte Komponente des Adapterelements in CardView enthält, müssen Sie das Hintergrundattribut in diesem Root-Layout festlegen. mögen:
quelle
Ripple- Ereignis für die Android-
Cardview
Kontrolle:quelle
Ich war mit AppCompat nicht zufrieden, also habe ich mein eigenes CardView geschrieben und Wellen zurückportiert. Hier läuft es auf Galaxy S mit Lebkuchen, also ist es definitiv möglich.
Weitere Details finden Sie im Quellcode .
quelle
Fügen Sie Ihrer XML Folgendes hinzu:
Und fügen Sie Ihrem Adapter hinzu (wenn es Ihr Fall ist)
quelle
Für diejenigen, die nach einer Lösung für das Problem des Ripple-Effekts suchen, der bei einer programmgesteuert erstellten CardView (oder in meinem Fall bei einer benutzerdefinierten Ansicht, die CardView erweitert), die in einer RecyclerView angezeigt wird, nicht funktioniert, hat Folgendes für mich funktioniert. Grundsätzlich scheint das deklarative Deklarieren der XML-Attribute in den anderen Antworten in der XML-Layoutdatei für eine programmgesteuert erstellte CardView oder eine aus einem benutzerdefinierten Layout erstellte nicht zu funktionieren (selbst wenn die Stammansicht CardView ist oder ein Zusammenführungselement verwendet wird) Sie müssen programmgesteuert wie folgt eingestellt werden:
Wo
MadeupCardView extends CardView
Kudos auf diese Antwort für denTypedArray
Teil.quelle
Nur API 21 funktionieren und diese verwenden, nicht diese Listenzeilenkartenansicht verwenden
quelle