-
Notifications
You must be signed in to change notification settings - Fork 0
/
Content.kt
116 lines (109 loc) · 3.5 KB
/
Content.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.example.ripplematerial2
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.ripple.LocalRippleTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
private val testAlphaList = listOf(0f, 0.25f, 0.5f, 0.75f, 1f)
private val testColorList = listOf(Color.Black, Color(67, 110, 222))
private val backgroundColor = Color.White
@Composable
fun Content() {
MaterialTheme {
CompositionLocalProvider(
LocalRippleTheme provides TestRippleTheme,
LocalRippleAlpha provides 0.5f,
LocalContentColor provides Color.Black
) {
Row {
testColorList.forEach { color ->
Column(
modifier = Modifier
.background(
colorWithOverlay(
contentColor = color,
rippleAlpha = 0.5f
)
)
.weight(1f)
.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
testAlphaList.forEach { alpha ->
TestCase(
rippleAlpha = alpha,
contentColor = color
)
}
}
}
}
}
}
}
@Composable
private fun TestCase(contentColor: Color, rippleAlpha: Float) {
CompositionLocalProvider(
LocalContentColor provides contentColor,
LocalRippleAlpha provides rippleAlpha
) {
val expectedFinalBackgroundColor = colorWithOverlay(
contentColor = contentColor,
rippleAlpha = rippleAlpha
)
Row {
TestCaseText(
modifier = Modifier
.background(backgroundColor),
text = "start"
)
TestCaseText(
modifier = Modifier
.background(backgroundColor)
.clickable { },
text = "alpha=$rippleAlpha"
)
TestCaseText(
modifier = Modifier
.background(expectedFinalBackgroundColor),
text = "final"
)
}
}
}
private fun colorWithOverlay(
contentColor: Color,
rippleAlpha: Float
) = contentColor
.copy(alpha = rippleAlpha)
.compositeOver(backgroundColor)
@Composable
private fun RowScope.TestCaseText(
modifier: Modifier = Modifier,
text: String
) {
Text(
modifier = modifier
.weight(1f)
.padding(5.dp),
textAlign = TextAlign.Center,
text = text
)
}
@Preview
@Composable
fun ContentPreview() {
Content()
}