Utworzyłem przycisk i chcę do niego dodać efekt tętnienia!
Utworzyłem plik XML bg przycisku: (bg_btn.xml)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient android:startColor="#FFFFFF" android:endColor="#00FF00" android:angle="270" />
<corners android:radius="3dp" />
<stroke android:width="5px" android:color="#000000" />
</shape>
A to jest mój plik efektu ripple: (ripple_bg.xml)
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="#f816a463"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#f816a463" />
</shape>
</item>
</ripple>
A to jest mój przycisk, do którego chcę dodać efekt tętnienia:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_centerHorizontal="true"
android:layout_marginTop="173dp"
android:textColor="#fff"
android:background="@drawable/ripple_bg"
android:clickable="true" />
Ale po dodaniu efektu tętnienia tło przycisku jest przezroczyste, a przycisk wyświetla się tylko po kliknięciu, na przykład:
Przed kliknięciem
Na kliknięcie
Ale potrzebuję zarówno koloru tła przycisku, jak i efektu tętnienia. Znalazłem część tego kodu na różnych blogach Stack Overflow, ale nadal nie działa!
l
lubm
do łącza do obrazu. (zobacz moją edycję)Odpowiedzi:
Oto kolejny plik XML do rysowania dla tych, którzy chcą dodać wszystko razem gradientowe tło, promień narożnika i efekt tętnienia:
Dodaj to do tła swojego przycisku.
PS: ta odpowiedź działa na Androidzie API 21 i nowszych.
źródło
ripple
.Dodaj
"?attr/selectableItemBackground"
doandroid:foreground
atrybutu widoku, jeśli ma już tło wraz zandroid:clickable="true"
.źródło
tools:ignore="UnusedAttribute
).?android:attr/selectableItemBackground
(android:attr
zamiastattr
)android:foreground
atrybut nie ma wpływu na poziomy API niższe niż 23Dodaj efekt falowania / animację do przycisku Androida
Po prostu zamień atrybut tła przycisku na android: background = "? Attr / selectableItemBackground", a Twój kod będzie wyglądał następująco.
Inny sposób na dodanie efektu falowania / animacji do przycisku Androida
Korzystając z tej metody, możesz dostosować kolor efektu tętnienia. Najpierw musisz utworzyć plik xml w katalogu zasobów do rysowania. Utwórz plik ripple_effect.xml i dodaj następujący kod. res / drawable / ripple_effect.xml
I ustaw tło przycisku na powyższy plik zasobów do rysowania
źródło
Oprócz rozwiązania Jigara Patela dodaj to do ripple.xml, aby uniknąć przezroczystego tła przycisków.
Kompletny xml :
Użyj tego ripple.xml jako tła w swoim przycisku:
źródło
<item android:id="@android:id/mask"> [...]
. Chyba że chcesz owalną maskę. Dziękuję za odpowiedź!Gdy przycisk ma tło z elementu rysowalnego, możemy dodać efekt ripple do parametru pierwszego planu .. Sprawdź poniżej kod, jak działa dla mojego przycisku z innym tłem
Dodaj poniższy parametr dla efektu tętnienia
W celach informacyjnych patrz poniższy link https://jascode.wordpress.com/2017/11/11/how-to-add-ripple-effect-to-an-android-app/
źródło
AppCompat v7 +
W zależności od preferencji należy użyć
"?android:attr/selectableItemBackground"
lub"?android:attr/selectableItemBackgroundBorderless"
. WolęBorderless
.Możesz go umieścić w istniejących nieruchomościach
android:background
lubandroid:foreground
je zachować.Element musi mieć
android:clickable="true"
iandroid:focusable="true"
, aby to działało, ale wiele elementów, takich jak przyciski, ma jetrue
domyślnie.Programowo (Java)
Programowo (Kotlin)
Funkcja rozszerzenia Kotlin wielokrotnego użytku
źródło
Dodanie atrybutów pierwszego planu i klikalnych atrybutów zadziałało.
źródło
Oprócz Sudheesh R
źródło
Używając android: background, zamieniasz znaczną część stylu oraz wyglądu przycisku na pusty kolor.
Aktualizacja: od wersji 23.0.0 AppCompat dostępny jest nowy Widget.AppCompat.Button.Kolorowy styl, który używa colorButtonNormal Twojego motywu dla wyłączonego koloru i colorAccent dla włączonego koloru.
Pozwala to zastosować go bezpośrednio do przycisku za pomocą
Możesz użyć drawable w katalogu v21 jako tła, takiego jak:
Zapewni to, że kolor tła to? Attr / colorPrimary i będzie mieć domyślną animację tętnienia przy użyciu domyślnego? Attr / colorControlHighlight (które możesz również ustawić w swoim motywie, jeśli chcesz).
Uwaga: musisz utworzyć selektor niestandardowy dla wersji wcześniejszej niż 21:
źródło
Spróbuj tego
źródło
Prostym podejściem jest ustawienie motywu widoku, jak opisano tutaj .
some_view.xml
some_style.xml
źródło
Po prostu użyj :
Zamiast:
Nie zapomnij zmienić
Button
naandroid.support.v7.widget.AppCompatButton
źródło
Alternatywne rozwiązanie do korzystania z
<ripple>
tagu (którego osobiście wolę nie robić, ponieważ kolory nie są „domyślne”) jest następujące:Utwórz element do rysowania dla tła przycisku i uwzględnij
<item android:drawable="?attr/selectableItemBackground">
w<layer-list>
Następnie (i myślę, że jest to ważna część) ustawiane programowo
backgroundResource(R.drawable.custom_button)
w instancji przycisku.Aktywność / fragment
Układ
custom_button.xml
źródło