使用GradientDrawable如何设置渐变起始远离视图末端,提升实色区域占比
实现方案
要实现前半段为实色、从中间位置才开始渐变的效果,可以通过给GradientDrawable设置多段颜色节点+对应位置的方式实现:GradientDrawable支持通过setPositions()方法指定每个颜色在渐变中对应的位置(取值范围0~1,0对应视图起始端,1对应视图结束端),你只需要在渐变起始端到你想要开始淡出的位置都设置为相同的实色,后续再过渡到透明色即可。
修改后的代码如下:
Palette.from(resource!!.toBitmap()).generate { it ?: return@generate val paletteColor = it.getDarkVibrantColor("#000000".toColorInt()) // 三个颜色节点:起始实色、中间开始渐变位置的实色、结束位置的透明色 val colors = intArrayOf( colorWithAlpha(paletteColor, 1.0f), colorWithAlpha(paletteColor, 1.0f), colorWithAlpha(paletteColor, 0f) ) // 对应颜色的位置:0(最左端)、0.5(宽度中心)、1(最右端) val positions = floatArrayOf(0f, 0.5f, 1f) val gradientDrawable = GradientDrawable( GradientDrawable.Orientation.LEFT_RIGHT, colors ).apply { cornerRadius = 0f setPositions(positions) } _contentTextBackground.background = gradientDrawable }
调整说明
- 如果需要调整实色的占比,只需要修改
positions数组里第二个参数的值即可,比如要前70%区域都是实色,就把0.5f改成0.7f。 - 如果你需要的是右半段为实色、左半段淡出的效果,把颜色数组的顺序反过来,位置数组保持不变即可。
内容的提问来源于stack exchange,提问作者tyczj
相关产品推荐
相关产品推荐

