应用 ColorFilter / ColorMatrix 将图像完全变白
Apply ColorFilter / ColorMatrix to turn image completely white
我的工具栏上有一个圆形的 ProgressBar,用于显示正在发生的一些不确定的进度,但是 ProgressBar 的默认样式(我知道的唯一一个使它变成圆环的样式)与工具栏的颜色相同( 'colorPrimary'颜色)。
我试过的样式是?android:attr/progressBarStyleLarge
和?android:attr/progressBarStyleLargeInverse
,两者的颜色都和工具栏一样,所以不可见。
我读到我可以通过应用滤色器来改变颜色:
toolbarProgress.getIndeterminateDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
但是,我找不到一个 'PorferDuff.Mode' 可以将彩色图像变成全白图像(同时保持 alpha 透明度不变)。
除了使用 PorterDuff 模式,我还可以应用 ColorMatrix。例如把它变成灰度我可以用这个:
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(new float[] {
0.5f, 0.5f, 0.5f, 0, 0,
0.5f, 0.5f, 0.5f, 0, 0,
0.5f, 0.5f, 0.5f, 0, 0,
0, 0, 0, 1, 0
});
toolbarProgress.getIndeterminateDrawable().setColorFilter(filter);
同样的问题:我找不到将图像完全变白的正确矩阵。灰度很接近,但变成了灰色而不是纯白色。
我想要的是将所有彩色像素变成纯白色,并让所有 alpha 像素透明。
除非有更简单的方法来更改本机 ProgressBar 的颜色..?
一定要ColorMatrixColorFilter
吗?您可以使用 DrawableCompat
为 Drawables
着色。
Drawable drawable = DrawableCompat.wrap(progressBar.getIndeterminateDrawable());
DrawableCompat.setTint(drawable, Color.WHITE);
toolbarProgress.setIndeterminateDrawable(drawable);
我的工具栏上有一个圆形的 ProgressBar,用于显示正在发生的一些不确定的进度,但是 ProgressBar 的默认样式(我知道的唯一一个使它变成圆环的样式)与工具栏的颜色相同( 'colorPrimary'颜色)。
我试过的样式是?android:attr/progressBarStyleLarge
和?android:attr/progressBarStyleLargeInverse
,两者的颜色都和工具栏一样,所以不可见。
我读到我可以通过应用滤色器来改变颜色:
toolbarProgress.getIndeterminateDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
但是,我找不到一个 'PorferDuff.Mode' 可以将彩色图像变成全白图像(同时保持 alpha 透明度不变)。
除了使用 PorterDuff 模式,我还可以应用 ColorMatrix。例如把它变成灰度我可以用这个:
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(new float[] {
0.5f, 0.5f, 0.5f, 0, 0,
0.5f, 0.5f, 0.5f, 0, 0,
0.5f, 0.5f, 0.5f, 0, 0,
0, 0, 0, 1, 0
});
toolbarProgress.getIndeterminateDrawable().setColorFilter(filter);
同样的问题:我找不到将图像完全变白的正确矩阵。灰度很接近,但变成了灰色而不是纯白色。
我想要的是将所有彩色像素变成纯白色,并让所有 alpha 像素透明。
除非有更简单的方法来更改本机 ProgressBar 的颜色..?
一定要ColorMatrixColorFilter
吗?您可以使用 DrawableCompat
为 Drawables
着色。
Drawable drawable = DrawableCompat.wrap(progressBar.getIndeterminateDrawable());
DrawableCompat.setTint(drawable, Color.WHITE);
toolbarProgress.setIndeterminateDrawable(drawable);