在Oreo上,SeekBar拇指上的setColorFilter()会改变所有拇指

时间:2018-05-17 16:00:00

标签: android android-8.0-oreo seekbar-thumb

我有一个班级public class LevelSeekBar extends AppCompatSeekBar。在那个课程中,我有这个方法:

@Override
public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    int color = getResources().getColor(getColorForState(enabled));
    getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}

此LevelSeekBar在自定义列表中使用,使用RecyclerView实现。在刷新时,逐个调用每个LevelSeekBar.setEnabled()。

在设备上< Android 8.0(Oreo),完全符合预期。

但是,在Android 8.0上,拇指的全部是根据列表中的最后一个颜色设置的。换句话说,我们说我有一个包含2个项目的列表 - 第一个是“禁用”#39;第二个是启用' - 两个项目都会显示为已启用。

我已在调试器中确认已启用'变量和返回的相应颜色是正确的和预期的,我已经确认在这种情况下正在刷新完整的recyclerview。

好像是一个奥利奥小虫。有没有其他人看过这个,或者有任何关于如何解决的想法?

1 个答案:

答案 0 :(得分:2)

您需要在.mutate()返回的Drawable上调用getThumb()

https://developer.android.com/reference/android/graphics/drawable/Drawable.html#mutate()