Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在recyclerView中更改可绘制视图的背景色而不更改其主体?_Java_Android_Android Recyclerview_Android Drawable - Fatal编程技术网

Java 如何在recyclerView中更改可绘制视图的背景色而不更改其主体?

Java 如何在recyclerView中更改可绘制视图的背景色而不更改其主体?,java,android,android-recyclerview,android-drawable,Java,Android,Android Recyclerview,Android Drawable,我有一个标准的可绘制的身体和颜色。 但是在我的recyclerView的绑定过程中,每当我调用这个方法时,我都很难更改这个可绘制文件的颜色 holder.item.setBackgroundColor() 或者setBackground它甚至可以根据需要改变颜色,但最终完全改变了我最初画图的形状 我的形状可以拉长: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=&q

我有一个标准的可绘制的身体和颜色。 但是在我的
recyclerView
的绑定过程中,每当我调用这个方法时,我都很难更改这个可绘制文件的颜色
holder.item.setBackgroundColor()
或者
setBackground
它甚至可以根据需要改变颜色,但最终完全改变了我最初画图的形状

我的形状可以拉长:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@android:color/holo_orange_dark" />
    <size
        android:width="120dp"
        android:height="120dp"
        />
</shape>
我需要的是:

我得到的是:


在适配器中添加以下实用程序方法

public static void setDrawableColor(Context context, Drawable drawable, int color) {
    Drawable drawableWrap = DrawableCompat.wrap(drawable).mutate();
    DrawableCompat.setTint(drawableWrap, ContextCompat.getColor(context, color));
}
并在
onBindViewHolder

@Override
public void onBindViewHolder(coresHolder holder, int position) {
    cores cores=list.get(position);
    holder.vincule(cores);
   
    // Changing background drawable
    setDrawableColor(holder.item.getContext(), holder.item.getBackground(), R.color.purple_700);
    
}
演示:


我的目的是在不改变车身的情况下改变支架的颜色。
public static void setDrawableColor(Context context, Drawable drawable, int color) {
    Drawable drawableWrap = DrawableCompat.wrap(drawable).mutate();
    DrawableCompat.setTint(drawableWrap, ContextCompat.getColor(context, color));
}
@Override
public void onBindViewHolder(coresHolder holder, int position) {
    cores cores=list.get(position);
    holder.vincule(cores);
   
    // Changing background drawable
    setDrawableColor(holder.item.getContext(), holder.item.getBackground(), R.color.purple_700);
    
}