Android Радиальный градиент имеет более темные цвета вместо прозрачных - PullRequest
0 голосов
/ 21 июня 2020

Я использую Kotlin и хочу сгенерировать растровое изображение, которое имеет круг с нарисованным на нем радиальным градиентом со следующими цветами [ПРОЗРАЧНЫЙ, КРАСНЫЙ] . Где центральный цвет прозрачный и постепенно становится красным. Но когда я попытался использовать Color.Transparent в качестве прозрачного цвета, он выглядел как прозрачный черный цвет. Я также пробовал использовать прозрачный красный цвет: Color.parseColor ("# 00FF0000") вместо Color.Transparent, но я получил тот же результат. На изображении ниже вы можете увидеть ожидаемый результат, которого я хочу достичь, и фактический результат, который я получаю!

введите описание изображения здесь

Вот исходный код:

fun generateBitmapWithCircle(
        radius: Float = 10f, colors: IntArray, stops: FloatArray,
        shadowColor: Int = Color.TRANSPARENT, shadowRadius: Float = 1f, backgroundColor: Int = Color.TRANSPARENT
    ): Bitmap {

        val diameter = (radius * 2).toInt()
        val bitmap = Bitmap.createBitmap(diameter, diameter, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(bitmap)
        val paint = Paint().apply {
            isAntiAlias = true
        }

        // background color
        if (backgroundColor != Color.TRANSPARENT) {
            canvas.drawColor(backgroundColor)
        }

        // shadow
        if (shadowColor != Color.TRANSPARENT) {
            paint.setShadowLayer(shadowRadius, 0f, 0f, shadowColor)
        }

        // fill circle with radial gradient
        val radialGradient = RadialGradient(radius, radius, radius, colors, stops, Shader.TileMode.CLAMP)
        paint.style = Paint.Style.FILL
        paint.shader = radialGradient
        paint.alpha = (1f * 255).toInt()
        canvas.drawCircle(radius, radius, radius, paint)

        return bitmap
    }

А вот как сгенерировать растровое изображение:

val bitmap = generateBitmapWithCircle(
    radius,
    intArrayOf(Color.parseColor("#00FF0000"), Color.RED, Color.RED),
    floatArrayOf(0.55f, 0.88f, 1f)
)
...