Как установить волновой эффект на просмотр текста или изображения на Android?

Я хочу установить волновой эффект на просмотр текста и изображения в Android Studio. Как мне это сделать?

18 ответов

Решение

Ссылка: 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"
/>

Если вы хотите, чтобы пульсация была ограничена размером TextView/ImageView, используйте:

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

(Я думаю, что это выглядит лучше)

Пожалуйста, обратитесь ниже ответ для волнового эффекта.

рябь на Textview или представление:

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

пульсация на кнопке или просмотре изображения:

android:foreground="?android:attr/selectableItemBackgroundBorderless"

Добавитьandroid:clickable="true"android:focusable="true"

Для эффекта пульсации

android:background="?attr/selectableItemBackgroundBorderless"

Для выбираемого эффекта

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

Для эффекта кнопки

android:adjustViewBounds="true" style="?android:attr/borderlessButtonStyle"
<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" />

добавить это в 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" />

попробуй это.

Вы можете использовать Android-Ripple-фон

Начать эффект

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();
    }
});

Остановить анимацию:

rippleBackground.stopRippleAnimation();

Для круговой ряби: android:background="?attr/selectableItemBackgroundBorderless"

для прямоугольной ряби: android:background="?attr/selectableItemBackground"

android:background="?android:selectableItemBackground"
android:focusable="true"
android:clickable="true"

В случае решения с хорошим голосованием, опубликованного @Bikesh M, Annur ( здесь) не работает, попробуйте использовать:

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

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

Также при использовании android:clickable="true" добавлять android:focusable="true" так как:

"Виджет, который объявлен кликабельным, но не объявлен фокусируемым, недоступен через клавиатуру".

Попробуй это. Это работает для меня.

android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground"

Дополнение к вышеупомянутым ответам добавляет фокус, чтобы избежать предупреждения редактора пользовательского интерфейса

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

Если приведенные выше решения не работают для вашего TextView, это определенно сработает:

1. добавить этот стиль

<style name="ClickableView">
    <item name="colorControlHighlight">@android:color/white</item>
    <item name="android:background">?selectableItemBackground</item>
</style>

2. используйте это просто

android:theme="@style/ClickableView"

В дополнение к ответу @Bikesh M Annur обязательно обновите свои библиотеки поддержки. Ранее я использовал 23.1.1 и ничего не произошло. Обновление до 23.3.0 сделало свое дело.

Или вы можете попробовать использовать эту библиотеку (Android 9+): RippleEffect

интеграция

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

Использование:

<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>
      <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/textHint"/>
        </shape>
    </item>
    <item android:state_pressed="false">
        <shape>
            <solid android:color="@android:color/transparent"/>
        </shape>
    </item>
</selector>




<TextView
      android:id="@+id/t9_key_6"
      android:layout_height="80dp"
      android:text="@string/number_six"
      android:background="@drawable/keyboard_button_bg"
      android:textSize="30sp" />

Лучше всего добавить:

    <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" />

selectableItemBackgroundBorderless не работает, если у вас установлено какое-либо свойство фона или цвета фона. Это не работало для меня.

      android:background="?attr/selectableItemBackgroundBorderless"

но хорошая новость в том, что он работает и на переднем плане.

      android:foreground="?attr/selectableItemBackgroundBorderless"

Лучший способ - использовать библиотеки. Это один из них. Просто добавьте его зависимость и поместите ниже код в xml перед каждым элементом, который нуждается в волновом эффекте:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">
Другие вопросы по тегам