How to create ripple effect in simple layout
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
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"
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.