No Android, quando defino a imagem de fundo como Botão, não consigo ver nenhum efeito no botão.
Preciso de algum efeito no botão para que o usuário possa reconhecer que o botão foi clicado.
O botão deve estar escuro por alguns segundos quando for clicado. O que devo fazer para isso?
Obrigado.
Respostas:
Isso pode ser obtido criando um arquivo xml drawable contendo uma lista de estados para o botão. Então, por exemplo, se você criar um novo arquivo xml chamado "button.xml" com o seguinte código:
Para manter a imagem de fundo com uma aparência escurecida na impressão, crie um segundo arquivo xml e chame-o de gradient.xml com o seguinte código:
No xml do seu botão, defina o plano de fundo como o xml do botão, por exemplo
Espero que isto ajude!
Editar: Mudou o código acima para mostrar uma imagem (YOURIMAGE) no botão em oposição a uma cor de bloco.
fonte
É mais simples quando você tem muitos botões de imagem e não quer escrever xml-s para cada botão.
Versão Kotlin:
Versão Java:
fonte
Crie seu
AlphaAnimation
objeto que decide quanto será o efeito de esmaecimento do botão e, em seguida, deixe-o começar noonClickListener
de seus botõesPor exemplo :
claro que esta é apenas uma forma, não a preferida, é apenas mais fácil
fonte
Você pode simplesmente usar o primeiro plano para
View
obter um efeito clicável:Para usar com o tema escuro, adicione também o tema ao seu
layout
(para que o efeito clicável fique claro):fonte
Para tornar o seu item consistente com a aparência do sistema, tente fazer referência ao atributo do sistema
android:attr/selectableItemBackground
no plano de fundo ou na tag de primeiro plano da visualização desejada:Use os dois atributos para obter o efeito desejado antes / depois do nível 23 da API, respectivamente.
https://stackoverflow.com/a/11513474/4683601
fonte
Ou usando apenas uma imagem de fundo, você pode obter o efeito de clique usando
setOnTouchListener
Dois caminhos
E se você não quiser usar
setOnTouchLister
, a outra maneira de conseguir isso éfonte
só quero adicionar outra maneira fácil de fazer isso: se seu ImageButton permanecer como plano de fundo e você não defini-lo como nulo, ele funcionará como um botão normal e mostrará a animação de clique enquanto clica exatamente como os outros botões. o fundo enquanto ainda está lá:
Os preenchimentos não deixam o fundo ficar visível e fazem com que o botão funcione como outros botões.
fonte
Esta é a melhor solução que encontrei seguindo as dicas da resposta de @Vinayak. Todas as outras soluções têm desvantagens diferentes.
Em primeiro lugar, crie uma função como esta.
Explicação:
getConstantState (). newDrawable () é usado para clonar o Drawable existente, caso contrário, o mesmo drawable será usado. Leia mais aqui: Android: clonando um drawable para criar um StateListDrawable com filtros
mutate () é usado para fazer com que o clone do Drawable não compartilhe seu estado com outras instâncias do Drawable. Leia mais sobre isso aqui: https://developer.android.com/reference/android/graphics/drawable/Drawable.html#mutate ()
Uso:
Você pode passar qualquer tipo de View (Button, ImageButton, View etc) como parâmetro para a função e eles obterão o efeito de clique aplicado a eles.
fonte
fonte
Use RippleDrawable para efeito pressionado / clicado no estado do Material Design.
Para conseguir isso, crie o item ondulado como um .xml na pasta / drawable e use-o em android: background para quaisquer visualizações.
Efeito para ícone pressionado / clicado, use efeito de ondulação circular, por exemplo:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray" />
Efeito para a visualização clicada com o limite do retângulo, podemos adicionar ondulação sobre o drawable existente como abaixo:
<?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>
fonte
Para todas as visualizações
android:background="?android:attr/selectableItemBackground"
Mas para cardview que tem uso de elevação
android:foreground="?android:attr/selectableItemBackground"
Para efeito de clique circular como na barra de ferramentas
Além disso, você precisa definir
fonte
Fazendo um pequeno acréscimo à resposta de Andràs:
Você pode usar
postDelayed
para fazer o filtro de cor durar um pequeno período de tempo para torná-lo mais perceptível:Você pode alterar o valor do atraso 100L para atender às suas necessidades.
fonte
Se você estiver usando fundo xml em vez de IMG, basta remover:
da 1ª resposta que @Ljdawson nos deu.
fonte