複数の色や配置など、より詳細な制御が必要な場合は、コードで行うこともできます。これが、描画可能な放射状グラデーションを作成するための私のKotlinスニペットです。
object ShaderUtils {
private class RadialShaderFactory(private val colors: IntArray, val positionX: Float,
val positionY: Float, val size: Float): ShapeDrawable.ShaderFactory() {
override fun resize(width: Int, height: Int): Shader {
return RadialGradient(
width * positionX,
height * positionY,
minOf(width, height) * size,
colors,
null,
Shader.TileMode.CLAMP)
}
}
fun radialGradientBackground(vararg colors: Int, positionX: Float = 0.5f, positionY: Float = 0.5f,
size: Float = 1.0f): PaintDrawable {
val radialGradientBackground = PaintDrawable()
radialGradientBackground.shape = RectShape()
radialGradientBackground.shaderFactory = RadialShaderFactory(colors, positionX, positionY, size)
return radialGradientBackground
}
}
基本的な使用法(ただし、追加のパラメーターで自由に調整してください):
view.background = ShaderUtils.radialGradientBackground(Color.TRANSPARENT, BLACK)