Eu criei um botão e quero adicionar efeito cascata a esse botão!
Criei um arquivo XML de botão bg: (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>
E este é o meu arquivo de efeito cascata: (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>
E este é o meu botão que eu quero adicionar efeito cascata:
<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" />
Mas depois de adicionar o efeito cascata, o fundo do botão fica transparente e o botão é exibido apenas quando clicado, desta forma:
Antes de clicar
Ao clicar
Mas eu preciso da cor de fundo dos botões e do efeito cascata, encontrei parte desse código em diferentes blogs do Stack Overflow, mas ainda não está funcionando!
l
oum
ao link da imagem. (ver minha edição)Respostas:
Aqui está outro xml extraível para aqueles que desejam adicionar todos os efeitos de fundo gradiente, raio de canto e ondulação:
Adicione isso ao fundo do seu botão.
fonte
ripple
.Adicione o atributo
"?attr/selectableItemBackground"
ao seu modo de exibição,android:foreground
se ele já tiver um plano de fundo junto comandroid:clickable="true"
.fonte
tools:ignore="UnusedAttribute
).?android:attr/selectableItemBackground
(emandroid:attr
vez deattr
) #android:foreground
atributo não tem efeito nos níveis de API inferiores a 23Adicionar Efeito Ripple / Animação a um botão do Android
Apenas substitua o atributo background do botão pelo android: background = "? Attr / selectableItemBackground" e seu código fica assim.
Outra maneira de adicionar efeito cascata / animação a um botão do Android
Usando esse método, você pode personalizar a cor do efeito cascata. Primeiro, você deve criar um arquivo xml no diretório de recursos desenhados. Crie um arquivo ripple_effect.xml e adicione o seguinte código. res / drawable / ripple_effect.xml
E defina o plano de fundo do botão para o arquivo de recurso extraível acima
fonte
Além da solução de Jigar Patel , adicione-a ao ripple.xml para evitar o fundo transparente dos botões.
XML completo :
Usa isto ripple.xml como plano de fundo no seu botão:
fonte
<item android:id="@android:id/mask"> [...]
. A menos que você queira uma máscara oval. Obrigado pela sua resposta!Quando o botão tem um plano de fundo do drawable, podemos adicionar efeito cascata ao parâmetro do primeiro plano. Verifique abaixo o código que está funcionando para o meu botão com um plano de fundo diferente
Adicione abaixo o parâmetro para o efeito cascata
Para referência, consulte o link abaixo https://jascode.wordpress.com/2017/11/11/how-to-add-ripple-effect-to-an-android-app/
fonte
AppCompat v7 +
Você deve usar
"?android:attr/selectableItemBackground"
ou"?android:attr/selectableItemBackgroundBorderless"
, com base em sua preferência. Eu prefiroBorderless
.Você pode colocá-lo
android:background
ouandroid:foreground
manter as propriedades existentes.O elemento deve ter
android:clickable="true"
eandroid:focusable="true"
para que isso funcione, mas muitos elementos, como botões, os possuemtrue
por padrão.Programaticamente (Java)
Programaticamente (Kotlin)
Função de extensão Kotlin reutilizável
fonte
Adicionar atributos de primeiro plano e clicáveis funcionou para mim.
fonte
Além de Sudheesh R
fonte
Ao usar o android: background, você substitui grande parte do estilo e da aparência de um botão por uma cor em branco.
Atualização: a partir da versão 23.0.0 do AppCompat, existe um novo estilo colorido Widget.AppCompat.Button.A que usa colorButtonNormal do seu tema para a cor desativada e colorAccent para a cor ativada.
Isso permite que você o aplique diretamente no botão via
Você pode usar um drawable em seu diretório v21 para o seu plano de fundo, como:
Isso garantirá que a cor do plano de fundo seja? Attr / colorPrimary e tenha a animação de ondulação padrão usando o padrão? Attr / colorControlHighlight (que você também pode definir no seu tema, se desejar).
Nota: você precisará criar um seletor personalizado para menos de v21:
fonte
tente isso
fonte
Uma abordagem simples é definir um tema de exibição, conforme descrito aqui .
some_view.xml
some_style.xml
fonte
Apenas use :
Ao invés de:
Não esqueça de mudar
Button
paraandroid.support.v7.widget.AppCompatButton
fonte
Uma solução alternativa para usar o
<ripple>
tag (que eu pessoalmente prefiro não fazer, porque as cores não são "padrão") é a seguinte:Crie um drawable para o segundo plano do botão e inclua
<item android:drawable="?attr/selectableItemBackground">
no<layer-list>
Então (e acho que essa é a parte importante) programaticamente definida
backgroundResource(R.drawable.custom_button)
na sua instância de botão.Atividade / Fragmento
Layout
custom_button.xml
fonte