Реализация эффекта пульсации вне ImageButton

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

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

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

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

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

Solutions Collecting From Web of "Реализация эффекта пульсации вне ImageButton"

Я столкнулся с этим, и моя проблема в том, что «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). Волнистость наиболее заметна при заполнении кнопки. Если слой маскировки вообще отсутствует, рябь становится несвязанной, а вид захватывает весь экран. Вы можете использовать любую форму, которую хотите, если не круг.

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

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

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

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

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

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

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

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

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