Como definir um efeito cascata na visualização de texto ou visualização de imagens no Android?

127

Quero definir um efeito cascata na visualização de texto e na visualização de imagens no Android Studio. Como eu posso fazer isso?

Vasant
fonte
1
Por favor, elabore sua pergunta primeiro . com / ajuda / how-to-perguntar
Anirudh Sharma
Na verdade, eu quero efeito para exibição de texto e imagem-view selecionar / desmarcar efeito.
Vasant
você já tentou procurar o mesmo?
Anirudh Sharma

Respostas:

276

Ref: http://developer.android.com/training/material/animations.html ,

http://wiki.workassis.com/category/android/android-xml/

<TextView
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>

<ImageView
.
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>
Bikesh M
fonte
2
bom que trabalhou comigo no pirulito, mas desta forma para qual versão android android? e funciona no pré-pirulito?
Basheer AL-MOMANI 25/03
2
@ Richard que eu tive um problema com KitKat (ou ICS) um ano atrás, e clique ouvintes não funcionou sem android: clickable = "true" para essa versão
DoruChidean
25
Nas versões modernas do Android, este é agoraandroid:background="?android:attr/selectableItemBackground"
tmm1
2
Como posso usar isso quando quero um plano de fundo personalizado?
Mrid
3
A diferença entre isso com / sem Borderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt
81

Se você deseja que a ondulação seja limitada ao tamanho do TextView / ImageView, use:

<TextView
android:background="?attr/selectableItemBackground"
android:clickable="true"/>

(Eu acho que parece melhor)

Micro
fonte
2
Existe alguma diferença no uso selectableItemBackgroundvsselectableItemBackgroundBorderless
kashyap rakesh
Eu não sei por que não foi limitada às fronteiras e expandir através de layout inteira
VSB
4
@rakeshkashyap a diferença é que selectableItemBackground manterá a ondulação dentro do tamanho da visualização (largura / altura). selectableItemBackgroundBorderless vai expandir a sua ondulação sobre outros pontos de vista (como a ondulação oficial calculadora app)
Tudor
1
e também precisa definir esta >>> android: = focusable "verdadeiro"
Amos
25

Consulte a resposta abaixo para obter um efeito cascata.

ondulação no Textview ou no modo de exibição:

android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackgroundBorderless"

ondulação no botão ou na visualização de imagem:

android:foreground="?android:attr/selectableItemBackgroundBorderless"
Vasant
fonte
4
Observe que selectableItemBackgroundBorderlessé a API 21+. Abaixo, você pode optar selectableItemBackgroundpor evitar problemas de compatibilidade
StevenTB
10

Você pode usar android-ripple-background

Efeito inicial

final RippleBackground rippleBackground=(RippleBackground)findViewById(R.id.content);
ImageView imageView=(ImageView)findViewById(R.id.centerImage);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        rippleBackground.startRippleAnimation();
    }
});

Parar animação:

rippleBackground.stopRippleAnimation();
IntelliJ Amiya
fonte
legais! existe uma versão Kotlin disso?
rengineer
8
<TextView
            android:id="@+id/txt_banner"
            android:layout_width="match_parent"
            android:text="@string/banner"
            android:gravity="center|left"
            android:layout_below="@+id/title"
            android:background="@drawable/ripple_effect"
            android:paddingLeft="15dp"
            android:textSize="15sp"
            android:layout_height="45dp" />

adicione isso no drawable

<?xml version="1.0" encoding="utf-8"?>
<!--this ribble animation only working for >= android version 21-->
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/click_efect" />

tente isso.

Karthik Sridharan
fonte
6

tente isso. Isso é trabalhado para mim.

android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground"
Juboraj Sarker
fonte
1
Eu já mencionei isso antes ( stackoverflow.com/a/50347848/1954960 ), portanto, em vez de causar uma resposta duplicada, aguarde minha resposta, obrigado! :)
Zafer Celaloglu
5

Além das respostas acima, é possível adicionar foco para evitar o aviso do editor da interface do usuário

android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
Zafer Celaloglu
fonte
4

No caso da solução bem votada postada por @Bikesh M Annur ( aqui ) não funcionar, tente usar:

<TextView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true" />

<ImageView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true" />

Além disso, ao usar android:clickable="true"add, android:focusable="true"porque:

" Um widget que é declarado clicável, mas não declarado focalizável, não pode ser acessado pelo teclado. "

Filipe Brito
fonte
3

Adicionar android:clickable="true" android:focusable="true"

Para efeito cascata

android:background="?attr/selectableItemBackgroundBorderless"

Para efeito selecionável

android:background="?android:attr/selectableItemBackground"

Para efeito de botão

android:adjustViewBounds="true" style="?android:attr/borderlessButtonStyle"
silver_hawk
fonte
2

Além da resposta de @Bikesh M Annur, atualize suas bibliotecas de suporte. Anteriormente, eu estava usando 23.1.1 e nada aconteceu. Atualizá-lo para 23.3.0 fez o truque.

Mark Pazon
fonte
2

para ondulação do círculo: android:background="?attr/selectableItemBackgroundBorderless"

para ondulação retangular: android:background="?attr/selectableItemBackground"

Bita Mirshafiee
fonte
1

Ou você pode tentar usar esta biblioteca (Android 9 ou posterior ): RippleEffect

Integração

dependencies {
    compile 'com.github.traex.rippleeffect:library:1.3'
}

Uso:

<com.andexert.library.RippleView
  android:id="@+id/more"
  android:layout_width="?android:actionBarSize"
  android:layout_height="?android:actionBarSize"
  android:layout_toLeftOf="@+id/more2"
  android:layout_margin="5dp"
  rv_centered="true">

  <ImageView
    android:layout_width="?android:actionBarSize"
    android:layout_height="?android:actionBarSize"
    android:src="@android:drawable/ic_menu_edit"
    android:layout_centerInParent="true"
    android:padding="10dp"
    android:background="@android:color/holo_blue_dark"/>

</com.andexert.library.RippleView>
walkmn
fonte
8
Usei-o por um longo tempo, mas não o recomendo mais, a menos que você aponte para o Android 2.3. É buggy, lento e produz código clichê. E, como agora, 43% de todos os dispositivos têm Android 5 ou 6, você pode se manter fiel ao selectableItemBackgroundAndroid 4 ou superior.
0101100101
0

A melhor maneira de adicionar:

    <ImageView
        android:id="@+id/ivBack"
        style="?attr/actionButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:src="@drawable/ic_back_arrow_black"
        android:tint="@color/white" />
Jack
fonte
-4

Usando bibliotecas. Este é um deles. Basta adicionar sua dependência e colocar o código abaixo em xml antes de cada elemento que precisa de efeito cascata:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">
Amirhossein Naghshzan
fonte
4
ah, por favor não, não é o melhor caminho, porque você tem menos controle sobre ele e é amplamente suportado no próprio SDK do Android. Se alguém ler isso, recomendo olhar para o comentário de @Bikesh ou Karthik, se você quiser controlar a cor.
Dion Segijn