代码之家  ›  专栏  ›  技术社区  ›  Asset Bekbossynov

根据某些值平滑更改按钮的可绘制背景色

  •  -1
  • Asset Bekbossynov  · 技术社区  · 7 年前

    我的问题是我有一个带可绘制背景的按钮,它的XML代码如下

    <Button
    android:id="@+id/prolongate"
    style="@style/styleBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="32dp"
    android:layout_marginEnd="32dp"
    android:layout_marginStart="32dp"/>
    

    这里,根据样式,这个按钮的背景是带有以下代码的可绘制文件

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <solid android:color="#ff3add79" />
        <corners android:radius="128dp" />
    </shape>
    

    现在,我想根据值动态更改此按钮的背景色,这是数字选择器中的标记,但不更改其形状。我不能创建一个文件到一个值,硬编码在这里不合适)。我如何解决这个问题?

    2 回复  |  直到 7 年前
        1
  •  1
  •   user4551037    7 年前

    使用颜色过滤器可以动态改变抽屉的颜色。

    Drawable buttonBackground = button.getBackground();
        buttonBackground = buttonBackground.mutate();
        buttonBackground.setColorFilter(Color.parseColor("#ff0000"), Mode.SRC_IN);
        button.setBackground(buttonBackground);
    

    https://developer.android.com/reference/android/graphics/ColorFilter 同时检查模式 https://developer.android.com/reference/android/graphics/PorterDuff.Mode

        2
  •  0
  •   Mahavir Jain    7 年前

    您还可以使用Gradient Drawable并提供值运行时。

    val gd = GradientDrawable()
            gd.shape = GradientDrawable.RECTANGLE
            gd.setColor(Color.RED)
            gd.cornerRadius = 15.0f
            mBinding.actMainTextview.setBackground(gd)
    
            mBinding.actMainTextview.setOnClickListener(object : View.OnClickListener {
                override fun onClick(v: View?) {
                    gd.setColor(Color.YELLOW)
                }
    
            })