diff options
| author | 2021-03-23 18:43:58 -0700 | |
|---|---|---|
| committer | 2021-03-23 21:09:40 -0700 | |
| commit | 891be74c100c723fd7abc06ddfb907c45e0e7f64 (patch) | |
| tree | 44d56e0f2515b50109890f51868f02a6f87e6ea2 | |
| parent | 98ffa1355dd0f63cf59e8279578b727a0ec64152 (diff) | |
Ripple UX feedback
- update ring function
- make sparkles larger
- make sparkles visible at the beginning of the animaiton
Test: visual
Fixes: 182172654
Change-Id: Ia40beebda6e5ee70d85c163eda68a8af2792ddbd
| -rw-r--r-- | graphics/java/android/graphics/drawable/RippleShader.java | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/graphics/java/android/graphics/drawable/RippleShader.java b/graphics/java/android/graphics/drawable/RippleShader.java index 5dd250c8239e..98b9584f7b4a 100644 --- a/graphics/java/android/graphics/drawable/RippleShader.java +++ b/graphics/java/android/graphics/drawable/RippleShader.java @@ -60,17 +60,13 @@ final class RippleShader extends RuntimeShader { + " float d = distance(uv, xy);\n" + " return 1. - smoothstep(1. - blurHalf, 1. + blurHalf, d / radius);\n" + "}\n" - + "\n" - + "float getRingMask(vec2 frag, vec2 center, float r, float progress) {\n" - + " float dist = distance(frag, center);\n" - + " float expansion = r * .6;\n" - + " r = r * min(1.,progress);\n" - + " float minD = max(r - expansion, 0.);\n" - + " float maxD = r + expansion;\n" - + " if (dist > maxD || dist < minD) return .0;\n" - + " return min(maxD - dist, dist - minD) / expansion; \n" + + "float softRing(vec2 uv, vec2 xy, float radius, float progress, float blur) {\n" + + " float thickness = 0.2 * radius;\n" + + " float currentRadius = radius * progress;\n" + + " float circle_outer = softCircle(uv, xy, currentRadius + thickness, blur);\n" + + " float circle_inner = softCircle(uv, xy, currentRadius - thickness, blur);\n" + + " return clamp(circle_outer - circle_inner, 0., 1.);\n" + "}\n" - + "\n" + "float subProgress(float start, float end, float progress) {\n" + " float sub = clamp(progress, start, end);\n" + " return (sub - start) / (end - start); \n" @@ -80,8 +76,8 @@ final class RippleShader extends RuntimeShader { + " float fadeOutNoise = subProgress(0.375, 1., in_progress);\n" + " float fadeOutRipple = subProgress(0.375, 0.75, in_progress);\n" + " vec2 center = mix(in_touch, in_origin, fadeIn);\n" - + " float ring = getRingMask(p, center, in_maxRadius, fadeIn);\n" - + " float alpha = min(fadeIn, 1. - fadeOutNoise);\n" + + " float ring = softRing(p, center, in_maxRadius, fadeIn, 0.45);\n" + + " float alpha = 1. - fadeOutNoise;\n" + " vec2 uv = p * in_resolutionScale;\n" + " vec2 densityUv = uv - mod(uv, in_noiseScale);\n" + " float sparkle = sparkles(densityUv, in_noisePhase) * ring * alpha;\n" @@ -137,8 +133,7 @@ final class RippleShader extends RuntimeShader { } public void setResolution(float w, float h, int density) { - float noiseScale = 0.8f; - float densityScale = density * DisplayMetrics.DENSITY_DEFAULT_SCALE * 0.5f * noiseScale; + float densityScale = density * DisplayMetrics.DENSITY_DEFAULT_SCALE * 0.5f; setUniform("in_resolutionScale", new float[] {1f / w, 1f / h}); setUniform("in_noiseScale", new float[] {densityScale / w, densityScale / h}); } |