Как создать эффект пульсации в простой компоновке
Как я могу иметь эффект пульсации в простой линейной/относительной компоновке при касании макета?
Я попытался установить фон макета на что-то вроде:
<?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>
9 ответов:
установите эти свойства на вашем макете (если ваш макет имеет белый/светлый фон по умолчанию):
android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground"вам не нужен пользовательский drawable в этом случае.
однако, если ваш макет имеет черный / темный фон, вам придется создать свой собственный пульсации drawable, как этот:
<?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>а затем установить эту пульсацию drawable как ваш android: фон собственность.
Я добавляю это в дополнение к Игорь Ганапольскийответ в случае, если кто-то хочет иметь макет с другим цветом, а также иметь эффект пульсации. Вы просто создаете эффект пульсации в таких чертежах:
пульсация.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"
вы должны изменить следующий фрагмент кода в любой виджет(
TextView/Button) и вы можете реализовать Эффект:android:clickable="true" android:focusable="true" android:foreground="?attr/selectableItemBackground"и вы хорошо идти.
оказывается, это работает по назначению. Стандартное значение темы материала colorControlHighlight -
#40ffffff. Так что на белом фоне это не будет отображаться. Изменение цвета подсветки на что-то другое работает, и/или изменение цвета фона объекта.спасибо всем (особенно Аланв за то, что указал мне в правильном направлении).
просто добавьте эффект пульсации по умолчанию с
android:background="?selectableItemBackground"как:
<LinearLayout android:layout_width="match_parent" android:layout_height="100dp" android:background="?selectableItemBackground" android:clickable="true" > ... </LinearLayout>
<?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>использовать пульсация.xml в Drawable folder, а затем назначить его в качестве вида
android: background= "@drawable / ripple"
android: clickable= "true"
поместите это в свой макет:
android:clickable="true" android:background="?attr/selectableItemBackground"Примечание: есть ошибка в документации API. Он будет работать только на API > = 23
на все APIуровень использовать решение
нах мне все эти ответы и ничего не работало для меня, поэтому я решил создать следующий стиль:
<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>
Comments