Подтвердить что ты не робот

Как создать эффект ряби в простом макете

Как я могу получить эффект пульсации в простой линейной/относительной компоновке при касании макета?

Я попытался установить фон макета на что-то вроде:

<?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>
4b9b3361

Ответ 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>