RatingBar以编程方式设置选择器

时间:2016-01-19 08:30:02

标签: android android-custom-view ratingbar

在我的自定义评级栏类中,我想以编程方式设置其选择器。

这可以改变颜色状态。

 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);

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

1 个答案:

答案 0 :(得分:0)

最后,我完成了以下工作。

添加了一个layerlist 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);
    }