# ShadowOverlayHelper

# ShadowOverlayHelper

Artifact:[androidx.leanback:leanback](https://developer.android.com/jetpack/androidx/releases/leanback)  
[View Source](https://cs.android.com/search?q=file:androidx/leanback/widget/ShadowOverlayHelper.java+class:androidx.leanback.widget.ShadowOverlayHelper)  
Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

*** ** * ** ***

Kotlin\|[Java](https://developer.android.com/reference/androidx/leanback/widget/ShadowOverlayHelper "View this page in Java")

<br />

```
class ShadowOverlayHelper
```

<br />

*** ** * ** ***

ShadowOverlayHelper is a helper class for shadow, overlay color and rounded corner. There are many choices to implement Shadow, overlay color. Initialize it with ShadowOverlayHelper.Builder and it decides the best strategy based on options user choose and current platform version.

- For shadow: it may use 9-patch with opticalBounds or Z-value based shadow for API \>= 21. When 9-patch is used, it requires a ShadowOverlayContainer to include 9-patch views.
- For overlay: it may use ShadowOverlayContainer which overrides draw() or it may use setForeground(new ColorDrawable()) for API\>=23. The foreground support might be disabled if rounded corner is applied due to performance reason.
- For rounded-corner: it uses a ViewOutlineProvider for API\>=21.

There are two different strategies: use Wrapper with a ShadowOverlayContainer; or apply rounded corner, overlay and rounded-corner to the view itself. Below is an example of how helper is used.`
ShadowOverlayHelper mHelper = new ShadowOverlayHelper.Builder().
.needsOverlay(true).needsRoundedCorner(true).needsShadow(true)
.build();
mHelper.prepareParentForShadow(parentView); // apply optical-bounds for 9-patch shadow.
mHelper.setOverlayColor(view, Color.argb(0x80, 0x80, 0x80, 0x80));
mHelper.setShadowFocusLevel(view, 1.0f);
...
View initializeView(View view) {
if (mHelper.needsWrapper()) {
ShadowOverlayContainer wrapper = mHelper.createShadowOverlayContainer(context);
wrapper.wrap(view);
return wrapper;
} else {
mHelper.onViewCreated(view);
return view;
}
}
...

`

## Summary

|                                                                                   ### Nested types                                                                                   |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `class `[ShadowOverlayHelper.Builder](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper.Builder) Builder for creating ShadowOverlayHelper. |
| `class `[ShadowOverlayHelper.Options](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper.Options) Option values for ShadowOverlayContainer. |

|                                    ### Constants                                    |
|-------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `const `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | [SHADOW_DYNAMIC](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#SHADOW_DYNAMIC())` = 3` Shadows depend on the size, shape, and position of the view. |
| `const `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | [SHADOW_NONE](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#SHADOW_NONE())` = 1` No shadow.                                                         |
| `const `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | [SHADOW_STATIC](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#SHADOW_STATIC())` = 2` Shadows are fixed.                                             |

|                                                    ### Public functions                                                     |
|-----------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [ShadowOverlayContainer](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayContainer)`!` | [createShadowOverlayContainer](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#createShadowOverlayContainer(android.content.Context))`(context: `[Context](https://developer.android.com/reference/android/content/Context.html)`!)` Create ShadowOverlayContainer for this helper.                                                                                                                                                                    |
| [Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)                                                 | [getShadowType](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#getShadowType())`()`                                                                                                                                                                                                                                                                                                                                                                   |
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                                         | [needsOverlay](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#needsOverlay())`()`                                                                                                                                                                                                                                                                                                                                                                     |
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                                         | [needsRoundedCorner](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#needsRoundedCorner())`()`                                                                                                                                                                                                                                                                                                                                                         |
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                                         | [needsWrapper](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#needsWrapper())`()` Returns true if a "wrapper" ShadowOverlayContainer is needed.                                                                                                                                                                                                                                                                                                       |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)                                               | [onViewCreated](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#onViewCreated(android.view.View))`(view: `[View](https://developer.android.com/reference/android/view/View.html)`!)` Must be called when view is created for cases[needsWrapper](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#needsWrapper())is false.                                                                                  |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)                                               | [prepareParentForShadow](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#prepareParentForShadow(android.view.ViewGroup))`(parent: `[ViewGroup](https://developer.android.com/reference/android/view/ViewGroup.html)`!)` [prepareParentForShadow](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#prepareParentForShadow(android.view.ViewGroup))must be called on parent of container before using shadow. |
| `java-static `[Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)                                 | [setNoneWrapperOverlayColor](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#setNoneWrapperOverlayColor(android.view.View,int))`(view: `[View](https://developer.android.com/reference/android/view/View.html)`!, color: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`)` Set overlay color for view other than ShadowOverlayContainer.                                                                                 |
| `java-static `[Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)                                 | [setNoneWrapperShadowFocusLevel](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#setNoneWrapperShadowFocusLevel(android.view.View,float))`(view: `[View](https://developer.android.com/reference/android/view/View.html)`!, level: `[Float](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html)`)` Set shadow focus level (0 to 1).                                                                                                |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)                                               | [setOverlayColor](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#setOverlayColor(android.view.View,int))`(view: `[View](https://developer.android.com/reference/android/view/View.html)`!, color: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`)` Set overlay color for view, it can be a ShadowOverlayContainer if needsWrapper() is true, or other view type.                                                       |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)                                               | [setShadowFocusLevel](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#setShadowFocusLevel(android.view.View,float))`(view: `[View](https://developer.android.com/reference/android/view/View.html)`!, level: `[Float](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html)`)` Set shadow focus level (0 to 1).                                                                                                                      |
| `java-static `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                           | [supportsDynamicShadow](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#supportsDynamicShadow())`()` Returns true if the platform sdk supports dynamic shadows.                                                                                                                                                                                                                                                                                        |
| `java-static `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                           | [supportsForeground](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#supportsForeground())`()` Returns true if view.setForeground() is supported.                                                                                                                                                                                                                                                                                                      |
| `java-static `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                           | [supportsRoundedCorner](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#supportsRoundedCorner())`()` Returns true if the platform sdk supports rounded corner through outline.                                                                                                                                                                                                                                                                         |
| `java-static `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                           | [supportsShadow](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#supportsShadow())`()` Return true if the platform sdk supports shadow.                                                                                                                                                                                                                                                                                                                |

## Constants

### SHADOW_DYNAMIC

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
const val SHADOW_DYNAMIC = 3: Int
```

Shadows depend on the size, shape, and position of the view.  

### SHADOW_NONE

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
const val SHADOW_NONE = 1: Int
```

No shadow.  

### SHADOW_STATIC

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
const val SHADOW_STATIC = 2: Int
```

Shadows are fixed.  

## Public functions

### createShadowOverlayContainer

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun createShadowOverlayContainer(context: Context!): ShadowOverlayContainer!
```

Create ShadowOverlayContainer for this helper.  

|                                          Parameters                                           |
|-----------------------------------------------------------------------------------------------|-------------------------|
| `context: `[Context](https://developer.android.com/reference/android/content/Context.html)`!` | Context to create view. |

|                                                           Returns                                                           |
|-----------------------------------------------------------------------------------------------------------------------------|-------------------------|
| [ShadowOverlayContainer](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayContainer)`!` | ShadowOverlayContainer. |

### getShadowType

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun getShadowType(): Int
```  

### needsOverlay

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun needsOverlay(): Boolean
```  

### needsRoundedCorner

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun needsRoundedCorner(): Boolean
```  

### needsWrapper

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun needsWrapper(): Boolean
```

Returns true if a "wrapper" ShadowOverlayContainer is needed. When needsWrapper() is true, call[createShadowOverlayContainer](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#createShadowOverlayContainer(android.content.Context))to create the wrapper.  

### onViewCreated

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun onViewCreated(view: View!): Unit
```

Must be called when view is created for cases[needsWrapper](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#needsWrapper())is false.  

|                                    Parameters                                     |
|-----------------------------------------------------------------------------------|---|
| `view: `[View](https://developer.android.com/reference/android/view/View.html)`!` |   |

### prepareParentForShadow

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun prepareParentForShadow(parent: ViewGroup!): Unit
```

[prepareParentForShadow](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayHelper#prepareParentForShadow(android.view.ViewGroup))must be called on parent of container before using shadow. Depending on Shadow type, optical bounds might be applied.  

### setNoneWrapperOverlayColor

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
java-static fun setNoneWrapperOverlayColor(view: View!, color: Int): Unit
```

Set overlay color for view other than ShadowOverlayContainer. See also[setOverlayColor](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayContainer#setOverlayColor(int)).  

### setNoneWrapperShadowFocusLevel

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
java-static fun setNoneWrapperShadowFocusLevel(view: View!, level: Float): Unit
```

Set shadow focus level (0 to 1). 0 for unfocused, 1 for fully focused. This is for view other than ShadowOverlayContainer. See also[setShadowFocusLevel](https://developer.android.com/reference/kotlin/androidx/leanback/widget/ShadowOverlayContainer#setShadowFocusLevel(float)).  

### setOverlayColor

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun setOverlayColor(view: View!, color: Int): Unit
```

Set overlay color for view, it can be a ShadowOverlayContainer if needsWrapper() is true, or other view type.  

### setShadowFocusLevel

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
fun setShadowFocusLevel(view: View!, level: Float): Unit
```

Set shadow focus level (0 to 1). 0 for unfocused, 1 for fully focused.  

### supportsDynamicShadow

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
java-static fun supportsDynamicShadow(): Boolean
```

Returns true if the platform sdk supports dynamic shadows.  

### supportsForeground

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
java-static fun supportsForeground(): Boolean
```

Returns true if view.setForeground() is supported.  

### supportsRoundedCorner

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
java-static fun supportsRoundedCorner(): Boolean
```

Returns true if the platform sdk supports rounded corner through outline.  

### supportsShadow

Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)  

```
java-static fun supportsShadow(): Boolean
```

Return true if the platform sdk supports shadow.