Я пытаюсь развернуть разные цвета на экране через регулярные интервалы (несколько раз в секунду).setColorFilter() взломан на Android 4, работая на Android 5
Для изменения цвета я использую Drawable.setColorFilter(int color, Mode mode)
на фоне моего главного вида:
myView.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC);
Для целей отладки, я добавил еще один вид, что я могу изменить с помощью View.setBackgroundColor(int color)
.
проблема в том, что setColorFilter()
звонки работают на леденец, но разбиты на предыдущих версиях (в частности Nexus 7 v4.4.4, Galaxy Nexus v4.2.1).
Я называю изменения цвета кода внутри Runnable
, который срабатывает через регулярные промежутки времени с помощью Handler
.
Обработчик вызывается на всех платформах (я вижу изменения фона из-за отладки вызовов setBackgroundColor()
).
Ниже приведен код цвета езда на велосипеде:
Handler mHandler;
RunnableOnTick thisRunnable;
View vDebug;
View vBroken;
class RunnableOnTick implements Runnable
{
int backgroundColor;
@Override
public void run()
{
color = random.nextInt(2);
switch (color)
{
case 0:
{
backgroundColor = Color.RED;
break;
}
case 1:
{
backgroundColor = Color.GREEN;
break;
}
}
// this works on all platforms
vDebug.setBackgroundColor(backgroundColor);
// this works only on Lollipop
vBroken.getBackground().setColorFilter(backgroundColor, PorterDuff.Mode.SRC);
vBroken.invalidate();
mHandler.postDelayed(thisRunnable, 100);
}
}
Я пробовал разные PorterDuff.Mode
значения - до сих пор не может получить его работу на Android 4.
Чем отличается между Android v4 и v5, который изменит способ работы setColorFilter()
?
Какой именно «Drawable» вы используете? Это может зависеть от конкретной реализации. –
@ Dmitry Если я правильно помню, я просто использовал значок зеленой андроидной ракеты-носителя, так как это было доказательством концепции, которую я бросил вместе. В конце я использовал другой метод и не смотрел на это приложение через несколько месяцев. –
Тогда это было «BitmapDrawable». Ну, если у вас больше нет приложения, тогда трудно найти проблему сейчас. Я могу, конечно, сказать, что в KitKat работает цветной фильтр (вы можете просто попробовать использовать атрибут «tint» в «ImageView» - он поддерживается ColorFilter) –