0

構成アクティビティを通じてボタン (ホームスクリーン ウィジェット) の背景を設定しようとしています。背景色は、その色を使用して (JSON から) ユーザーから受け入れられます。2 つの GradientDrawables が準備され、StateListDrawable に追加されます。これをボタンの背景として設定したい。ただし、RemoteViews の場合、Drawable クラスをサポートするメソッドはありません。ドローアブルを BitMap に変換すると、Button に、背景に BitMap を受け入れるメソッドがありません。

fun configueWidget(){
    val gd = GradientDrawable()
    val gdPressed = GradientDrawable()
    val stateDrawable = StateListDrawable()
    setButtonDrawableColor(gd,gdPressed,jsonObj.getInt("color"))
    stateDrawable.addState(intArrayOf(android.R.attr.state_pressed),gdPressed)
    stateDrawable.addState(intArrayOf(),gd)
    RemoteViews(context.packageName, R.layout.widget_layout).also { views->
        views.setTextViewCompoundDrawables(R.id.widget_button,jsonObj.getInt("icon_res_id"),0,0,0)

        //i want to set button background here

        val intent = Intent(context,ButtonWidgetProvider::class.java)
        intent.action = ButtonWidgetProvider.BUTTON_CLICK
        intent.putExtra("WidgetID",widgetId)
        val pendingIntent = PendingIntent.getActivity(context, widgetId, intent, 0)
        views.setOnClickPendingIntent(R.id.widget_button,pendingIntent)
        AppWidgetManager.getInstance(context).updateAppWidget(widgetId, views)
    }
}

fun setButtonDrawableColor(drawableNormal:GradientDrawable, drawablePressed:GradientDrawable, colorInt:Int){
    val red = Color.red(colorInt)
    val green = Color.green(colorInt)
    val blue = Color.blue(colorInt)
    val newColorInt = Color.argb(0xFF,
        when{red>0x80->red-0x30;else -> red+0x30},
        when{green>0x80->green-0x30;else -> green+0x30},
        when{blue>0x80->blue-0x30;else -> blue+0x30})
    drawableNormal.colors = intArrayOf(colorInt,newColorInt)
    drawableNormal.setStroke(8,newColorInt)

    val pressedColorInt = Color.argb(0xFF,
        when{red>0x80->red-0x20;else -> red+0x20},
        when{green>0x80->green-0x20;else -> green+0x20},
        when{blue>0x80->blue-0x20;else -> blue+0x20})
    val pressedColorGradientInt = Color.argb(0xFF,
        when{red>0x80->red-0x50;else -> red+0x50},
        when{green>0x80->green-0x50;else -> green+0x50},
        when{blue>0x80->blue-0x50;else -> blue+0x50})
    drawablePressed.colors = intArrayOf(pressedColorInt,pressedColorGradientInt)
    drawablePressed.setStroke(8,pressedColorGradientInt)
}

これを解決する方法はありますか?(色を変更できないので、リソースから背景を設定したくありません)

4

1 に答える 1