W Androidzie, kiedy ustawię obraz tła na przycisk, nie widzę żadnego efektu na przycisku.
Potrzebuję jakiegoś efektu na przycisku, aby użytkownik mógł rozpoznać, że przycisk został kliknięty.
Przycisk powinien być ciemny przez kilka sekund po kliknięciu, więc co mam z tym zrobić?
Dzięki.
Odpowiedzi:
Można to osiągnąć, tworząc nadający się do rysowania plik xml zawierający listę stanów przycisku. Na przykład, jeśli utworzysz nowy plik xml o nazwie „button.xml” z następującym kodem:
Aby zachować przyciemniony obraz tła w druku, utwórz drugi plik xml i nazwij go gradient.xml z następującym kodem:
W pliku XML twojego przycisku ustaw tło na przycisk xml np
Mam nadzieję że to pomoże!
Edycja: Zmieniono powyższy kod, aby wyświetlać obraz (YOURIMAGE) na przycisku, a nie kolor bloku.
źródło
Jest to prostsze, gdy masz dużo przycisków graficznych i nie chcesz pisać xml-s dla każdego przycisku.
Wersja Kotlin:
Wersja Java:
źródło
Stwórz swój
AlphaAnimation
obiekt, który decyduje o tym, jaki będzie efekt zanikania przycisku, a następnie pozwól mu rozpocząć się w jednymonClickListener
z przyciskówNa przykład :
oczywiście to tylko sposób, nie najbardziej preferowany, jest po prostu łatwiejszy
źródło
Można po prostu wykorzystać nową wiedzę dla Twojego
View
osiągnąć efekt klikalny:Do użytku z ciemnym motywem dodaj także motyw do swojego
layout
(aby klikalny efekt był jasny):źródło
Aby element był spójny z wyglądem i działaniem systemu, spróbuj odnieść się do atrybutu systemowego
android:attr/selectableItemBackground
w tagu tła lub pierwszego planu żądanego widoku:Użyj obu atrybutów, aby uzyskać pożądany efekt odpowiednio przed / po 23 poziomie API.
https://stackoverflow.com/a/11513474/4683601
źródło
Lub używając tylko jednego obrazu tła, możesz osiągnąć efekt kliknięcia używając
setOnTouchListener
Dwie drogi
A jeśli nie chcesz używać
setOnTouchLister
, innym sposobem na osiągnięcie tego jestźródło
po prostu chcę dodać inny łatwy sposób, aby to zrobić: Jeśli twój ImageButton pozostaje tłem i nie ustawisz go na null, będzie działał jak normalny przycisk i wyświetli animację kliknięcia podczas klikania dokładnie tak, jak inne przyciski. tło, gdy jeszcze tam jest:
Wypełnienia nie pozwolą, aby tło było widoczne i sprawi, że przycisk będzie działał jak inne przyciski.
źródło
To najlepsze rozwiązanie, jakie wymyśliłem, biorąc wskazówki z odpowiedzi @ Vinayak. Wszystkie inne rozwiązania mają różne wady.
Przede wszystkim utwórz taką funkcję.
Wyjaśnienie:
getConstantState (). newDrawable () służy do klonowania istniejącego Drawable, w przeciwnym razie zostanie użyty ten sam drawable. Przeczytaj więcej tutaj: Android: klonowanie elementu do rysowania w celu utworzenia StateListDrawable z filtrami
mutate () służy do tego, aby klon Drawable nie współdzielił swojego stanu z innymi wystąpieniami Drawable. Przeczytaj więcej na ten temat tutaj: https://developer.android.com/reference/android/graphics/drawable/Drawable.html#mutate ()
Stosowanie:
Możesz przekazać dowolny typ widoku (Button, ImageButton, View itp.) Jako parametr do funkcji, a uzyskają zastosowany do nich efekt kliknięcia.
źródło
źródło
Użyj RippleDrawable dla efektu wciśnięcia / kliknięcia stanu Material Design.
Aby to osiągnąć, utwórz element ripple jako folder .xml under / drawable i użyj go w android: background dla dowolnych widoków.
Efekt po naciśnięciu / kliknięciu ikony, użyj efektu tętnienia kołowego, na przykład:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray" />
Efekt dla widoku klikniętego granicą prostokąta, możemy dodać tętnienie na istniejącym rysunku, jak poniżej:
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#000000"> <item android:drawable="@drawable/your_background_drawable"/> </ripple>
źródło
Za wszystkie widoki
android:background="?android:attr/selectableItemBackground"
Ale dla widoku karty, który ma zastosowanie elewacji
android:foreground="?android:attr/selectableItemBackground"
Efekt kliknięcia kołowego jak na pasku narzędzi
Musisz także ustawić
źródło
Drobny dodatek do odpowiedzi Andràs:
Możesz użyć,
postDelayed
aby filtr koloru trwał przez krótki czas, aby był bardziej zauważalny:Możesz zmienić wartość opóźnienia 100L zgodnie ze swoimi potrzebami.
źródło
Jeśli używasz tła XML zamiast IMG, po prostu usuń to:
z pierwszej odpowiedzi, którą dał nam @Ljdawson.
źródło
Utwórz plik bounce.xml do animacji
Dodaj tę linię w onClick, aby zainicjować
Efekt zmniejszania się uzyskuje się po kliknięciu przycisku.
źródło