# CircularRevealWidget

[View Source](https://github.com/material-components/material-components-android/blob/1.14.0/lib/java/com/google/android/material/circularreveal/CircularRevealWidget.java)

*** ** * ** ***


```
public interface CircularRevealWidget extends CircularRevealHelper.Delegate
```

<br />

Known direct subclasses [CircularRevealCardView](https://developer.android.com/reference/com/google/android/material/circularreveal/cardview/CircularRevealCardView), [CircularRevealCoordinatorLayout](https://developer.android.com/reference/com/google/android/material/circularreveal/coordinatorlayout/CircularRevealCoordinatorLayout), [CircularRevealFrameLayout](https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealFrameLayout), [CircularRevealGridLayout](https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealGridLayout), [CircularRevealLinearLayout](https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealLinearLayout), [CircularRevealRelativeLayout](https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealRelativeLayout)

|---|---|
| `https://developer.android.com/reference/com/google/android/material/circularreveal/cardview/CircularRevealCardView` | A CircularRevealWidget wrapper for `https://developer.android.com/reference/com/google/android/material/card/MaterialCardView`. |
| `https://developer.android.com/reference/com/google/android/material/circularreveal/coordinatorlayout/CircularRevealCoordinatorLayout` | A CircularRevealWidget wrapper for CoordinatorLayout. |
| `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealFrameLayout` | A CircularRevealWidget wrapper for FrameLayout. |
| `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealGridLayout` | A CircularRevealWidget wrapper for GridLayout. |
| `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealLinearLayout` | A CircularRevealWidget wrapper for LinearLayout. |
| `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealRelativeLayout` | A CircularRevealWidget wrapper for RelativeLayout. |

Known indirect subclasses [TransformationChildCard](https://developer.android.com/reference/com/google/android/material/transformation/TransformationChildCard), [TransformationChildLayout](https://developer.android.com/reference/com/google/android/material/transformation/TransformationChildLayout)

|---|---|
| `https://developer.android.com/reference/com/google/android/material/transformation/TransformationChildCard` | **This class is deprecated.** Use `https://developer.android.com/reference/com/google/android/material/transition/MaterialContainerTransform` instead. <br /> |
| `https://developer.android.com/reference/com/google/android/material/transformation/TransformationChildLayout` | **This class is deprecated.** Use `https://developer.android.com/reference/com/google/android/material/transition/MaterialContainerTransform` instead. <br /> |

*** ** * ** ***

Interface which denotes that a View supports a circular clip and scrim color, even for pre-L APIs.

# Usage

You should not have to interact with instances of this interface directly. To modify the circular clip, use `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealCompat`. To modify the scrim color, use `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget.CircularRevealScrimColorProperty`.

# Implementation

To support circular reveal for an arbitrary view, create a subclass of that view that implements the `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget` interface. The subclass should instantiate a `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper` and pass itself into the helper's constructor.

All unimplemented methods should be implemented as directed in the javadoc.

Only Views should implement this interface. Callers may expect an instance of this interface to be a View.

## Summary

| ### Nested types |
|---|
| `public class https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget.CircularRevealEvaluator` A TypeEvaluator that performs type interpolation between two `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget.RevealInfo`s. |
| `public class https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget.CircularRevealProperty` A Property wrapper around the compound `circularReveal` functionality on a `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget`. |
| `public class https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget.CircularRevealScrimColorProperty` A Property wrapper around the `circularRevealScrimColor` functionality on a `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget`. |
| `public class https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget.RevealInfo` RevealInfo holds three values for a circular reveal. |

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#buildCircularRevealCache()()` Prepares the reveal info property to be modified. |
| `abstract void` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#destroyCircularRevealCache()()` Cleans up after the reveal info property is reset. |
| `abstract void` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#draw(Canvas)(Canvas canvas)` Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`. |
| `abstract Drawable` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#getCircularRevealOverlayDrawable()()` Returns the circular reveal overlay drawable if one exists, or null. |
| `abstract int` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#getCircularRevealScrimColor()()` Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`. |
| `abstract https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget.RevealInfo` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#getRevealInfo()()` Returns the current reveal info if one exists, or null. |
| `abstract boolean` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#isOpaque()()` Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`. |
| `abstract void` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#setCircularRevealOverlayDrawable(Drawable)(Drawable drawable)` Sets the circular reveal overlay drawable, which is an icon that's drawn above everything else, including the circular reveal scrim color. |
| `abstract void` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#setCircularRevealScrimColor(int)(int color)` Sets the circular reveal scrim color, which is a color that's drawn above this widget's contents. |
| `abstract void` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#setRevealInfo(com.google.android.material.circularreveal.CircularRevealWidget.RevealInfo)(https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget.RevealInfo revealInfo)` Sets the current reveal info. |

| ### Inherited methods |
|---|
| From [com.google.android.material.circularreveal.CircularRevealHelper.Delegate](https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper.Delegate) |---|---| | `abstract void` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper.Delegate#actualDraw(Canvas)(Canvas canvas)` Calls super#draw(Canvas). | | `abstract boolean` | `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper.Delegate#actualIsOpaque()()` Calls super#isOpaque(). | |

## Public methods

### buildCircularRevealCache

```
abstract void buildCircularRevealCache()
```

Prepares the reveal info property to be modified. See the interface javadoc for usage details.

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### destroyCircularRevealCache

```
abstract void destroyCircularRevealCache()
```

Cleans up after the reveal info property is reset. See the interface javadoc for usage details.

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### draw

```
abstract void draw(Canvas canvas)
```

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### getCircularRevealOverlayDrawable

```
abstract Drawable getCircularRevealOverlayDrawable()
```

Returns the circular reveal overlay drawable if one exists, or null.

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### getCircularRevealScrimColor

```
abstract int getCircularRevealScrimColor()
```

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### getRevealInfo

```
abstract CircularRevealWidget.RevealInfo getRevealInfo()
```

Returns the current reveal info if one exists, or null. The radius of the reveal info will never be greater than the distance to the furthest corner.

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### isOpaque

```
abstract boolean isOpaque()
```

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### setCircularRevealOverlayDrawable

```
abstract void setCircularRevealOverlayDrawable(Drawable drawable)
```

Sets the circular reveal overlay drawable, which is an icon that's drawn above everything else, including the circular reveal scrim color.

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### setCircularRevealScrimColor

```
abstract void setCircularRevealScrimColor(int color)
```

Sets the circular reveal scrim color, which is a color that's drawn above this widget's contents.

Because the scrim makes no assumptions about the shape of the view's background and content, callers should ensure that the scrim is only visible when the circular reveal does not yet extend to the edges of the view.

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.

### setRevealInfo

```
abstract void setRevealInfo(CircularRevealWidget.RevealInfo revealInfo)
```

Sets the current reveal info. Care should be taken to call `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#buildCircularRevealCache()` and `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealWidget#destroyCircularRevealCache()` appropriately. See the interface javadoc for usage details.

Note that on L+, calling this method doesn't result in any visual changes. You must use this with ViewAnimationUtils.

Implementations should call the corresponding method in `https://developer.android.com/reference/com/google/android/material/circularreveal/CircularRevealHelper`.