RatingBar 以编程方式设置选择器

RatingBar set selector programmatically

在我的自定义评分栏中 class 我想以编程方式设置它的选择器。

这有效并改变了颜色状态。

 LayerDrawable stars = (LayerDrawable) getProgressDrawable();
    stars.getDrawable(2).setColorFilter(Color.parseColor("#62CFDE"),
            PorterDuff.Mode.SRC_ATOP); // for filled stars
    stars.getDrawable(1).setColorFilter(Color.parseColor("#FFFFFF"),
            PorterDuff.Mode.SRC_ATOP); // for half filled stars
    stars.getDrawable(0).setColorFilter(Color.parseColor("#62CFDE"),
            PorterDuff.Mode.SRC_ATOP); // for empty stars

但是我想在选择器中设置图像,但是这段代码不起作用。

 StateListDrawable states = new StateListDrawable();
    states.addState(new int[]{android.R.attr.progressDrawable}, selectedImage);
    states.addState(new int[]{android.R.attr.progress}, selectedImage);
    states.addState(new int[]{android.R.attr.secondaryProgress}, backgroundImage);
    states.addState(new int[]{android.R.attr.background}, backgroundImage);
    setBackground(states);

请建议我如何以编程方式设置评分栏的选择器。

最后我完成了以下操作来实现这一点。

添加了图层列表xml,这里我给出了所有三个州的临时图像。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background"
    android:drawable="@drawable/blue_rect" />

<item android:id="@android:id/secondaryProgress"
    android:drawable="@drawable/blue_rect" />

<item android:id="@android:id/progress"
    android:drawable="@drawable/blue_rect" />

现在 运行 时,我们将按 ID 查找项目并更改其图像。

    LayerDrawable ld = (LayerDrawable)   getResources().getDrawable(R.drawable.ratingbar_selector);
    ld.setDrawableByLayerId(android.R.id.background, backgroundImage);
    ld.setDrawableByLayerId(android.R.id.secondaryProgress, backgroundImage);
    ld.setDrawableByLayerId(android.R.id.progress, selectedImage);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setProgressDrawableTiled(ld);
    }