Android: можете ли вы получить волновой эффект, цвет состояния которого по умолчанию прозрачен?

Что-то вроде следующего, но это не работает. Если я переключу цвет рисования на что-то вроде синего, это сработает.

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:drawable="@android:color/transparent"/>
</ripple>

person ZakTaccardi    schedule 03.02.2015    source источник
comment
Что вы имеете в виду под не работает?   -  person iheanyi    schedule 04.02.2015
comment
больше нет ряби, если цвет рисования прозрачен   -  person ZakTaccardi    schedule 04.02.2015
comment
Если рисуемый объект прозрачен, нет цвета, на который можно было бы повлиять.   -  person iheanyi    schedule 04.02.2015
comment
У меня есть интерактивный линейный макет, который содержит ImageView и TextView. оба этих дочерних представления имеют разные цвета. Я пытаюсь применить эффект ряби ко всему линейному макету, но сохраняю разные цвета фона дочерних представлений.   -  person ZakTaccardi    schedule 04.02.2015
comment
Если вы хотите иметь рябь на прозрачной форме, этот ответ показывает, как это сделать: stackoverflow.com /а/41097020/4034572   -  person Albert Vila Calvo    schedule 03.09.2019


Ответы (2)


Необходимо добавить маску:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
     <item android:id="@android:id/mask">
       <color android:color="@android:color/white" />
     </item>
</ripple>
person JMPergar    schedule 21.04.2015
comment
Это должен быть принятый ответ. Это оно!! Спасибо! - person Sotti; 12.05.2015
comment
Работает, как только я заметил, что цвет маски БЕЛЫЙ (что имеет смысл, если подумать). - person SMBiggs; 08.02.2016
comment
он может быть любого цвета или любого рисуемого, но не прозрачного. - person ataulm; 10.05.2016
comment
Лучший ответ, именно то, что мне нужно! - person Luis; 28.07.2016
comment
Как сделать то же самое в java динамически? - person dev1993; 18.12.2016
comment
Релевантно: stackoverflow.com/questions /30556160/ - person loeschg; 20.10.2017

Почему-то ответ @JMPergar у меня не сработал.

Тем не менее, я смог придумать этот обходной путь: если цвет за вашей прозрачной кнопкой сплошной (не градиент или крапчатое изображение) - вы можете использовать этот цвет в качестве ненажатого цвета основной кнопки.

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/profile_transparent_button_pressed"
        >

    <item>
        <shape>
            <corners android:radius="@dimen/profile_transparent_button_corner_radius" />
            <solid android:color="@color/profile_background" />
        </shape>
    </item>
</ripple>

где @color/profile_transparent_button_pressed — цвет выделения кнопки, а @color/profile_background — цвет макета за этой кнопкой. Он работает точно так, как ожидалось, но все же определенно является обходным путем, поэтому сначала попробуйте ответ @JMPergar.

person Den Drobiazko    schedule 09.07.2015
comment
Как он признает, это на самом деле не отвечает на вопрос, это просто плохой обходной путь. Хотя наличие сплошного цвета фона заставляет пульсацию работать, это именно то, чего мы хотим избежать. Почему? Потому что этот цвет фона, который пользователь на самом деле никогда не видит, постоянно создает ненужную перерисовку, даже когда нет ряби. Проверьте сами: зайдите в параметры разработчика и включите перерисовку (Отладка перерисовки GPU -> Показать области перерисовки). Вы увидите, что фон окрашен дважды одним и тем же цветом, что является пустой тратой времени. Конечно, для маленькой кнопки небольшая перерисовка приемлема. - person Albert Vila Calvo; 03.09.2019
comment
Я нашел, как вы можете иметь рябь на прозрачной форме здесь: stackoverflow.com/a/41097020 /4034572 - person Albert Vila Calvo; 03.09.2019