В моем приложении у меня есть ViewPager, который содержит изображения. Когда пользователь прокручивает изображения, появляется цветовая анимация, которая переводит цвет панели действия и цвет строки состояния между яркими цветами палитры двух растровых изображений. Проблема, которую я вижу, заключается в том, что, хотя она отлично работает, она становится очень изменчивой при выборе больших изображений.Использование асинхронного генератора палитр Android для анимации перехода цвета
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Palette paletteBefore = Palette.from(imagePagerAdapter.bitmap.get(position)).generate();
Palette paletteAfter = Palette.from(imagePagerAdapter.bitmap.get(position + 1)).generate();
//Using this to get the average color between the two palette colors at the current position offset.
int color = (Integer) new ArgbEvaluator().evaluate(positionOffset, paletteBefore.getVibrantColor(Color.parseColor("#2196F3")), paletteAfter.getVibrantColor(Color.parseColor("#2196F3")));
int darkColor = (Integer) new ArgbEvaluator().evaluate(positionOffset, paletteBefore.getDarkVibrantColor(Color.parseColor("#1976D2")), paletteAfter.getDarkVibrantColor(Color.parseColor("#1976D2")));
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setStatusBarColor(darkColor);
}
}
Я знаю, что есть встроенный асинхронный метод, который создает палитру в фоновом потоке, но я не могу получить доступ к сгенерированной палитрой:
Palette.from(imagePagerAdapter.bitmap.get(position)).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette p) {
paletteBefore = p; //Variable "paletteBefore" is accessed from within class, needs to be declared final
}
});
Даже если я создаю глобальный переменной, чтобы удерживать объект палитры, он всегда заканчивается нулевым. Я понятия не имею, как это решить, любые идеи?