Как установить волновой эффект на просмотр текста или изображения на 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">