How to create ripple effect in simple layout

前端 未结 10 1596
耶瑟儿~
耶瑟儿~ 2020-12-02 06:06

How can I have a ripple effect in a simple linear/relative layout when touching the layout?

I\'ve tried setting the background of a layout to something like:

相关标签:
10条回答
  • 2020-12-02 06:09

    I'm adding this in addition to Igor Ganapolsky's answer in case anyone wants to have a layout with different color and also have a ripple effect. You simply create a ripple effect in drawables like this:

    ripple.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>
    

    then give it as your layout's background or any button as Igor Ganapolsky mentioned in his answer.

    android:clickable="true"
    android:background="@drawable/ripple"
    
    0 讨论(0)
  • 2020-12-02 06:12

    Set android:clickable="true" on your layout.

    0 讨论(0)
  • 2020-12-02 06:14

    Set these properties on your layout (if your layout has the default white/light background):

              android:clickable="true"
              android:focusable="true"
              android:background="?attr/selectableItemBackground"
    

    You don't need a custom drawable in this case.

    However, if your layout has a black/dark background, you'd have to create your own ripple drawable like this one:

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

    And then set this ripple drawable as your android:background property.

    You can see many examples of these types of ripples in AOSP: in here

    0 讨论(0)
  • 2020-12-02 06:14

    It turns out this is working as intended. The standard Material theme colorControlHighlight value is #40ffffff. So on a white background, this will not show up. Changing the highlight color to something else works, and/or changing the background color of the object.

    Thanks all (especially Alanv for pointing me in the right direction).

    0 讨论(0)
  • 2020-12-02 06:15

    You have to alter following code snippet in any widget(TextView/Button) and you can implement Ripple Effect:

    android:clickable="true"
    android:focusable="true"
    android:foreground="?attr/selectableItemBackground"
    

    And you are good to go.

    0 讨论(0)
  • 2020-12-02 06:24

    This is an example for clicking on a sample layout with ripple effect :

     <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/selectableItemBackground"
        android:clickable="true"
        android:focusable="true"
        android:orientation="vertical">
    
    0 讨论(0)
提交回复
热议问题