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

Внедрение эффекта Ripple вне ImageButton

Я пытаюсь реализовать эффект пульсации для ImageButton. Я установил рябь в фоновом режиме и рисоваемое изображение в src для него.

android:background="@drawable/myripplexml"
android:src="@drawable/myimagepath"

Это дает хороший эффект пульсации внутри кнопки Layout. Но я хочу, чтобы эффект Ripple также расширялся за пределами макета кнопки. Другой способ сделать это - использовать:

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

Но он использует цвет и стиль по умолчанию. Как я могу настроить его в отношении цвета, формы и размера?

4b9b3361

Ответ 1

Я столкнулся с этим, и моя проблема в том, что "selectableItemBackgroundBorderless" создает прямоугольник, а моя кнопка была круговой. Я не уверен, отвечает ли этот вопрос на исходный вопрос, но вот что я нашел: установите фон в drawable-v21

<ripple
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="oval">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

и @null на более низких уровнях api (при условии, что вы используете селектор для кнопки реального изображения src). Волнистость наиболее заметна при заполнении кнопки. Если там вообще нет маскирующего слоя, рябь несвязана, а вид захватывает весь экран. Вы можете использовать любую фигуру, если хотите, а не круг.

Ответ 2

Если вы ленитесь, как я, используйте пульсацию по умолчанию и забудьте о обратной совместимости. В принципе, есть два типа фонового волнения, которые вы можете добавить к ur view:

 ?android:selectableItemBackground // Ripple within view
 ?android:selectableItemBackgroundBorderless //Ripple outside view

К сожалению, эти ряби всегда окрашены в серый цвет. Чтобы настроить их на основе вашей темы, перейдите к родительской теме ur и измените colorControlHighlight.

В основной теме приложения:

<item name="colorControlHighlight">#1bff3a</item>

Это значение изменит цвет пульсации по умолчанию.

Примечание: На устройствах ниже 21 пульсация превратится в селектор notmal с тем же цветом, который вы установили.

Ответ 3

Точно так же, как @alan упоминается в его комментарии. Если вы создаете элемент рябь без масок и дочерних элементов и добавляете его как фон представлений, рябь будет нарисована поверх первого доступного родителя и может расширять границы представлений. Это указано в документе

<!-- An unbounded red ripple. --/>
<ripple android:color="#ffff0000" />