Как создать эффект ряби в простом макете
Как я могу получить эффект пульсации в простой линейной/относительной компоновке при касании макета?
Я попытался установить фон макета на что-то вроде:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight" >
<item android:drawable="@android:color/white"/>
</ripple>
Однако я вижу только простой белый фон и эффект пульсации при касании макета. Что я делаю неправильно?
Edit:
Для справки, вот мой XML файл макета:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="250dp"
android:layout_height="250dp"
android:background="@drawable/test"
android:clickable="true">
</RelativeLayout>
Ответы
Ответ 1
Оказывается, это работает по назначению. Стандартное значение Цвет материала MaterialControlHighlight значение #40ffffff
. Так что на белом фоне это не появится. Изменение цвета подсветки для чего-то другого и/или изменение цвета фона объекта.
Спасибо всем (особенно Аланв за то, что указал мне в правильном направлении).
Ответ 2
Установите эти свойства в макете (если макет имеет белый/светлый фон по умолчанию):
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground"
В этом случае вам не нужно настраивать рисование.
Однако, если ваш макет имеет черный/темный фон, вам нужно создать свою собственную рисованную рябь, такую как эта:
<?xml version="1.0" encoding="utf-8"?>
<!-- An white rectangle ripple. -->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@android:color/white">
<item
android:id="@android:id/mask"
android:gravity="center">
<shape android:shape="rectangle">
<solid android:color="@android:color/white"/>
</shape>
</item>
</ripple>
А затем установите эту рисованную рябь в качестве свойства android: background.
Вы можете увидеть много примеров этих типов пульсаций в AOSP: здесь
Ответ 3
Я добавляю это в дополнение к Игорю Ганапольскому, если кто-то хочет иметь макет с разным цветом, а также эффект пульсации. Вы просто создаете эффект пульсации в чертежах следующим образом:
ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="@color/rippleColor"
tools:targetApi="lollipop"> <!-- ripple effect color -->
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/backgroundColor" /> <!-- background color -->
</shape>
</item>
</ripple>
то дайте его в качестве фона макета или любой кнопки в качестве Игоря Ганапольского, упомянутого в его ответе.
android:clickable="true"
android:background="@drawable/ripple"
Ответ 4
Вы должны изменить следующий фрагмент кода в любом виджете (TextView
/Button
), и вы можете реализовать эффект Ripple:
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
И тебе хорошо идти.
Ответ 5
Установите android:clickable="true"
в свой макет.
Ответ 6
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="#cfd8dc"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#d1c4e9" />
</shape>
</item>
</ripple>
Используйте этот файл ripple.xml в папке Drawable, затем назначьте его как View
Android: фон = "@вытяжка/пульсации"
андроид: кликабельны = "истина"
Ответ 7
Просто добавьте эффект пульсации по умолчанию с помощью android:background="?selectableItemBackground"
Подобно:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="?selectableItemBackground"
android:clickable="true"
>
...
</LinearLayout>
Ответ 8
Это пример нажатия на образец макета с эффектом ряби:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="vertical">
Ответ 9
Поместите это в свой макет:
android:clickable="true"
android:background="?attr/selectableItemBackground"
Примечание. В документации API есть ошибка. Он будет работать только на API >= 23
Для всех API уровней используйте Решение
Ответ 10
Я пытаюсь ответить на все эти вопросы, и ничто не помогло мне, поэтому я решил создать следующий стиль:
<style name="Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless">
<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
<item name="android:layout_marginLeft">-6dp</item>
<item name="android:layout_marginRight">-6dp</item>
<item name="android:paddingTop">0dp</item>
<item name="android:paddingBottom">0dp</item>
<item name="android:paddingLeft">6dp</item>
<item name="android:paddingRight">6dp</item>
</style>
И затем я применил к своей линейной компоновке:
<LinearLayout
android:id="@+id/ll_my_ripple"
style="@style/Button.Borderless">
</LinearLayout>