在我的自定义评级栏类中,我想以编程方式设置其选择器。
这可以改变颜色状态。
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);
请建议我如何以编程方式设置我的评级栏的选择器。
答案 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);
}