0

私は TextView に適用される SpannableString を持っています

fun appendIconBeforeText(context : Context, text : String, iconName : String, baseColor : String? = "#2da346") : SpannableStringBuilder{
        val span = SpannableStringBuilder(" $text")
        val start: Int = span.toString().indexOf(text)
        val end: Int = text.length
        val imgResId = context.resources.getIdentifier(iconName, "mipmap", context.packageName)
        val drawable = ContextCompat.getDrawable(context, imgResId)!!.mutate()
        drawable!!.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.parseColor(baseColor), BlendModeCompat.SRC_ATOP)
        drawable!!.setBounds(0, 0, convertDpToPixel(22, context).toInt(), convertDpToPixel(22, context).toInt())
        val image = ImageSpan(drawable!!, ImageSpan.ALIGN_CENTER)
        span.setSpan(image, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
        span.setSpan(ForegroundColorSpan(Color.parseColor(baseColor)), start, start + end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
        return span
    }

次に、グラデーションをTextViewに適用したいのですが、テキストのグラデーションは成功を示していますが、画像だけがグラデーションを適用できません:

tv.post {
 val length = tv.paint.measureText(tv.text.toString())
 val angle = Math.toDegrees(gradient.angel.toDouble())
 val endX = cos(angle) * length
 val endY = sin(angle) * length
 val shader = LinearGradient(0f, 0f, endX.toFloat(), endY.toFloat(), gradient.colors.toIntArray(), gradient.locations.toFloatArray(), Shader.TileMode.CLAMP)
 tv.paint.shader = shader
 tv.invalidate()                                                                                                                                                                                         
}

結果は次のとおりです。 ここに画像の説明を入力

誰かがここで何が悪いのか助けてもらえますか? ありがとう

4

0 に答える 0