Рисование пульсации над содержимым группы видов - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь применить волновой эффект (@drawable/pill) к макету. Волнистость отрисовывается под дочерними элементами макета, в то время как я хотел бы, чтобы эффект был применен к содержимому.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:background="@drawable/pill"
        android:padding="8dp">

        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/my_icon"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sample text"/>
    </FrameLayout>

</FrameLayout>

И pill.xml (где @drawable/pill_bg - это пользовательская фигура):

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:attr/colorControlHighlight">
    <item android:id="@android:id/mask" android:drawable="@drawable/pill_bg"/>
    <item android:drawable="@drawable/pill_bg"/>
</ripple>

Следуя другим постам, я безуспешно пытался применить android:background="@null" и android:drawSelectorOnTop="true" к ImageView.

Имеет ли смысл определять рябь в качестве фона макета? Мне интересно, если правильный подход состоит в том, чтобы отделить рябь от фона рисования и применить рябь к фиктивному представлению, которое перекрывает содержимое.

1 Ответ

0 голосов
/ 24 июня 2018

Вы правы.То, что вы определили в XML, работает так, как показано на первой диаграмме.Чтобы иметь возможность рисовать пульсации над ImageView и TextView, вы должны определить их над ними.Одним из подходов к достижению этого было бы иметь ImageView поверх вашей LinearLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/ll_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:padding="8dp">

        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/my_icon" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sample text" />
    </LinearLayout>

    <ImageView
        android:id="@+id/iv_ripple"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/ll_container"
        android:layout_alignLeft="@id/ll_container"
        android:layout_alignRight="@id/ll_container"
        android:layout_alignTop="@id/ll_container"
        android:src="@drawable/pill" />

</RelativeLayout>
...