Android 如何在自定义适配器中更改可绘制形状的背景色

Android 如何在自定义适配器中更改可绘制形状的背景色,android,android-layout,android-xml,android-adapter,android-drawable,Android,Android Layout,Android Xml,Android Adapter,Android Drawable,我在自定义listview项中有一个按钮,我正在使用以下可绘制xml文件: rounded_corner.xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="120dp" android:layout_height="100dp"> <stroke android:width="1dp" andro

我在自定义listview项中有一个按钮,我正在使用以下可绘制xml文件:

rounded_corner.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp" android:layout_height="100dp">

    <stroke
        android:width="1dp"
        android:color="#FFFFFF" />

    <solid android:color="#002832" />

    <padding
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />

    <corners android:radius="5dp" />

</shape>
我已经使用了002832颜色的绘图。现在,我想以编程方式更改可绘制文件的颜色。我该怎么做

在不理解问题的情况下,请停止重复标记

我已经检查了@Ganesh Pokele SO link anf,这完全不同

我已经检查了@bizzard提供的链接,但无法解决我的问题


我详细地描述了你想要什么,如果我能很好地理解你的问题,你可能会想看看

基本上,您应该创建另一个具有不同颜色的drawable,并通过yourView以编程方式进行设置。setBackgroundDrawable drawable:

另一个\u round\u corner.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp" android:layout_height="100dp">

    <stroke
        android:width="1dp"
        android:color="#FFFFFF" />

    <solid android:color="#002832" />

    <padding
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />

    <corners android:radius="5dp" />

</shape>
你会得到想要的效果。PorterDuff.Mode.SRC_top将在背景上应用所需的颜色,在另一种颜色之上,而不会混合它们。您必须在第一个参数中传递颜色,颜色将来自服务器。如果它是十六进制的,只需将其转换为RGB,例如,或者执行任何您需要的转换

你总是可以像那样通过编程更改可绘制的颜色,如果它适合你,请告诉我

让我知道它是否对您有帮助,如果有帮助,请向上投票/选择正确答案,干杯。

解决方案

如果您想通过编程动态更改可绘制颜色,请使用以下代码。 这是我的xml矩形边框


检查此Listview选择器示例GradientDrawablesomeView.getBackground.setColorsomeColor的可能重复项;你解决了吗?drawable的颜色可能是任意的,所以创建一个新的drawable不会有帮助。如果你有任何其他想法,请告诉我。但是,创建另一个可绘制文件有什么好处呢?颜色将来自服务器,可以是任何颜色,所以创建另一个可绘制文件有什么意义呢。如果我错了,请纠正我。这是有道理的。好的,检查我的更新答案,让我知道它是否适合你真棒!我很高兴知道
button.getBackground().setColorFilter(Color.rgb(40, 50, 60), PorterDuff.Mode.SRC_ATOP);