Android:以编程方式将颜色设置为ProgressBar
我想以编程方式将颜色设置为进度条primaryProgress,secondaryProgress,因为颜色将根据屏幕的背景颜色进行更改 代码: 编辑: **此处的颜色代码仅用于测试。之后,颜色代码将参考其他部分进行相应更新Android:以编程方式将颜色设置为ProgressBar,android,colors,android-progressbar,layerdrawable,Android,Colors,Android Progressbar,Layerdrawable,我想以编程方式将颜色设置为进度条primaryProgress,secondaryProgress,因为颜色将根据屏幕的背景颜色进行更改 代码: 编辑: **此处的颜色代码仅用于测试。之后,颜色代码将参考其他部分进行相应更新 secondaryColor.setColorFilter((Color.rgb(255, 0, 0)), PorterDuff.Mode.SRC_OVER); primaryColor.setColorFilter((Color.rgb(0, 255, 2
secondaryColor.setColorFilter((Color.rgb(255, 0, 0)), PorterDuff.Mode.SRC_OVER);
primaryColor.setColorFilter((Color.rgb(0, 255, 213)), PorterDuff.Mode.SRC_OVER);
progressDrawable.setDrawableByLayerId(progressDrawable.getId(2), new ClipDrawable(primaryColor, Gravity.LEFT, ClipDrawable.HORIZONTAL));
progressDrawable.setDrawableByLayerId(progressDrawable.getId(1), new ClipDrawable(secondaryColor, Gravity.LEFT, ClipDrawable.HORIZONTAL));
ProgressBar1.setProgressDrawable(progressDrawable);
ProgressBar1.setProgress(progress);
ProgressBar1.setSecondaryProgress(secondaryProgress);
问题:
它用红色下划线表示primanyColor.setColor
,并报告方法setColor(int,null)对于类型Drawable
未定义
我如何修改上述代码使其正常工作?谢谢 设置可绘制使用的颜色。比如:
您可以做的是首先通过xml使图层列表可绘制(表示背景为第一层,表示次要进度的可绘制为第二层,表示主要进度的另一可绘制为最后一层),然后通过执行以下操作更改代码上的颜色:
public void setPrimaryProgressColor(int colorInstance) {
if (progressBar.getProgressDrawable() instanceof LayerDrawable) {
Log.d(mLogTag, "Drawable is a layer drawable");
LayerDrawable layered = (LayerDrawable) progressBar.getProgressDrawable();
Drawable circleDrawableExample = layered.getDrawable(<whichever is your index of android.R.id.progress>);
circleDrawableExample.setColorFilter(colorInstance, PorterDuff.Mode.SRC_IN);
progressBar.setProgressDrawable(layered);
} else {
Log.d(mLogTag, "Fallback in case it's not a LayerDrawable");
progressBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
public void setPrimaryProgressColor(int-colorInstance){
if(progressBar.getProgressDrawable()实例的LayerDrawable){
Log.d(mLogTag,“可绘制是一个可绘制的层”);
LayerDrawable layered=(LayerDrawable)progressBar.getProgressDrawable();
Drawable circleDrawableExample=layered.getDrawable();
circleDrawableExample.setColorFilter(colorInstance,PorterDuff.Mode.SRC_-IN);
progressBar.setProgressDrawable(分层);
}否则{
Log.d(mLogTag,“如果它不是一个可分层绘制的文件,那么就要回退”);
progressBar.getProgressDrawable().setColorFilter(color,PorterDuff.Mode.SRC_-IN);
}
}
此方法将为您提供最大的灵活性,让您在xml上声明原始drawable的度量值,之后不需要修改其结构,特别是如果您需要特定于xml文件屏幕文件夹,那么只需通过代码修改颜色即可。无需从头开始重新实例化新的ShapeDrawable。以下是针对min sdk版本21及更高版本通过编程更改ProgressBar颜色的代码
ProgressBar myProgress = (ProgressBar) findViewById(R.id.pb_listProgressBar);
int colorCodeDark = Color.parseColor("#F44336");
myProgress.setIndeterminateTintList(ColorStateList.valueOf(colorCodeDark));
Do
primaryColor.getPaint().setColor(Color.rgb(Color_normal[0]、Color_normal[1]、Color_normal[2])代码>谢谢。我也试过了,结果出现了错误:getPaint()方法对于Drawable类型是未定义的
@pearmak:ok,然后使用primaryColor.setColorFilter
methodmakeShapeDrawable primaryColor
然后@ρѕρєK:非常感谢!它正在工作!如果您在编辑部分发布这样的答案,这将使我的应用程序在使用ViewHolder时崩溃。3件事:-确保您的progressbar不为空-确保您的progressbar使用的是可在其xml布局上绘制的图层列表-确保您的图层列表在xml中标识了每个项目:是的,progressbar不为空。是的,我的progressbar使用了一个可绘制的图层列表。是的,不幸的是它有两个3:(无论如何谢谢。我用progressBar.setprogresstinlist(ColorStateList.valueOf(Color.RED));
层列表的完美解决方案drawable。而不是使用layered.getDrawable(),使用layered.finddrawablebayerid(android.R.id.progress),它的错误更少pronemin sdk是21。
public void setPrimaryProgressColor(int colorInstance) {
if (progressBar.getProgressDrawable() instanceof LayerDrawable) {
Log.d(mLogTag, "Drawable is a layer drawable");
LayerDrawable layered = (LayerDrawable) progressBar.getProgressDrawable();
Drawable circleDrawableExample = layered.getDrawable(<whichever is your index of android.R.id.progress>);
circleDrawableExample.setColorFilter(colorInstance, PorterDuff.Mode.SRC_IN);
progressBar.setProgressDrawable(layered);
} else {
Log.d(mLogTag, "Fallback in case it's not a LayerDrawable");
progressBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
ProgressBar myProgress = (ProgressBar) findViewById(R.id.pb_listProgressBar);
int colorCodeDark = Color.parseColor("#F44336");
myProgress.setIndeterminateTintList(ColorStateList.valueOf(colorCodeDark));