На Oreo setColorFilter () на большом пальце SeekBar меняет все большие пальцы - PullRequest
0 голосов
/ 17 мая 2018

У меня есть класс 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 все превью установлены на основе последнего цвета, установленного в списке.Другими словами, допустим, у меня есть список из 2 элементов - первый «отключен», а второй «включен» - оба элемента будут отображаться как включенные.

Я подтвердил вотладчик, что переменная 'enabled' и соответствующий возвращенный цвет верны и соответствуют ожиданиям, и я подтвердил, что в этом случае обновляется полное представление переработчика.

Похоже на ошибку Oreo.Кто-нибудь еще видел это, или есть какие-нибудь идеи о том, как обойти?

1 Ответ

0 голосов
/ 17 мая 2018

Вам необходимо позвонить .mutate() на Drawable, который возвращается getThumb().

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

...