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


127

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


1
Пожалуйста, сначала уточните свой вопрос. Что на самом деле вам нужно и что вы пробовали до сих пор. Просто сказать, что я хочу эффект пульсации, делает его очень широким вопросом. Вы также можете дать ссылку на то, что вы хотите. Также см .
Анируд Шарма

На самом деле мне нужен эффект для текстового просмотра и эффекта выбора / отмены выбора изображения.
Васант

вы пробовали искать то же самое?
Анируд Шарма

Ответы:


278

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

2
приятно, что он работал со мной на леденце, но для какой версии Android Android? и работает ли он на pre-lollipop?
Basheer AL-MOMANI

2
@Richard У меня была проблема с KitKat (или ICS) год назад, и прослушиватели кликов не работали без android: clickable = "true" для этой версии
DoruChidean

25
На современных версиях android это сейчасandroid:background="?android:attr/selectableItemBackground"
tmm1

2
Как это использовать, если мне нужен собственный фон ??
мрд

3
Разница между этим с / без Borderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt

82

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

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

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


2
Есть ли разница в использовании selectableItemBackgroundvsselectableItemBackgroundBorderless
rakesh kashyap

Я не знаю, почему он не был ограничен рамками и расширялся по всей компоновке
VSB

4
@rakeshkashyap разница в том, что selectableItemBackground сохранит рябь в пределах своего размера представления (ширина / высота). selectableItemBackgroundBorderless расширит свою рябь по сравнению с другими представлениями (например, пульсация официального приложения-калькулятора)
Tudor

1
а также необходимо установить это >>> android: focusable = "true"
Амос

Полезно. Спасибо.
Пуджа

25

Пожалуйста, обратитесь к ответу ниже, чтобы узнать о волновом эффекте.

рябь на Textview или view:

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

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

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

4
Обратите внимание, что selectableItemBackgroundBorderlessэто API 21+. Ниже вы можете выбрать, selectableItemBackgroundчтобы избежать проблем с совместимостью
StevenTB

10

Вы можете использовать android-ripple-background

Пусковой эффект

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

отлично! есть ли это на Kotlin?
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" />

добавить это в возможность рисования

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

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


6

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

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

1
Я уже упоминал об этом ранее ( stackoverflow.com/a/50347848/1954960 ), поэтому вместо того, чтобы вызывать повторяющийся ответ, пожалуйста, поднимите вверх мой ответ, спасибо! :)
Зафер Джелалоглу 01

5

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

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

4

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

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

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

Кроме того, при использовании android:clickable="true"add, android:focusable="true"потому что:

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


4

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

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

android:background="?attr/selectableItemBackgroundBorderless"

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

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

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

android:adjustViewBounds="true" style="?android:attr/borderlessButtonStyle"

2

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


2

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

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


1

Или вы можете попробовать использовать эту библиотеку (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>

8
Я использовал его довольно долго, но больше не рекомендую, если вы не стремитесь к Android 2.3. Он глючит, тормозит и создает шаблонный код. И поскольку в настоящее время 43% всех устройств имеют Android 5 или 6, вы можете просто придерживаться его selectableItemBackgroundпри ориентации на Android 4 и выше.
0101100101

0

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

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

-4

Использование библиотек. Это один из них. Просто добавьте его зависимость и поместите ниже код в xml перед каждым элементом, которому нужен эффект пульсации:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">

4
О, пожалуйста, нет, это не лучший способ, потому что у вас меньше контроля над ним, и он широко поддерживается в самом Android SDK. Если кто-нибудь прочитает это, я рекомендую посмотреть комментарий @Bikesh или Karthik, если вы хотите контролировать цвет.
Dion Segijn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.