Как создать эффект пульсации в простой компоновке



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



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



<?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>
606   9  

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: фон собственность.

Вы можете увидеть много примеров пульсации в AOSP: http://androidxref.com/8.0.0_r4/search?q=ripple&defs=&refs=&path=&hist=&project=art&project=bionic&project=bootable&project=build&project=cts&project=dalvik&project=developers&project=development&project=device&project=docs&project=external&project=frameworks&project=hardware&project=kernel&project=libcore&project=libnativehelper&project=packages&project=pdk&project=platform_testing&project=prebuilts&project=sdk&project=system&project=test&project=toolchain&project=tools

Я добавляю это в дополнение к Игорь Ганапольскийответ в случае, если кто-то хочет иметь макет с другим цветом, а также иметь эффект пульсации. Вы просто создаете эффект пульсации в таких чертежах:

пульсация.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. Так что на белом фоне это не будет отображаться. Изменение цвета подсветки на что-то другое работает, и/или изменение цвета фона объекта.

спасибо всем (особенно Аланв за то, что указал мне в правильном направлении).

Set android:clickable="true" на ваш макет.

просто добавьте эффект пульсации по умолчанию с 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

    Ничего не найдено.