Я положил ViewPager с прозрачным фоном над другим фоном зрением, и когда свитки ViewPager, я изменить цвет фона Вида с гладким переходом цвета, например:Почему анимация перехода цвета неправильна, когда ViewPager прокручивается влево?
- На странице 1, фон красный.
- Когда ViewPager прокручивается со страницы 1 на страницу 2, я заменяю фон LayerDrawable, RED сверху, BLUE внизу.
- Во время прокрутки я уменьшил альфа верхнего слоя, показывая переход от красного к СИНИМ.
- Наконец, на стр. 2, после прокрутки заканчивается, я меняю фон на СИНИЙ.
Он работает как ожидается, когда я прокручиваю слева направо, но когда я прокручиваю влево, кажется, что нижний и верхний слои меняются на противоположные.
Вот мой код:
private int[] colors = {Color.BLUE, Color.RED, Color.GREEN, Color.CYAN};
private int currentPage;
private LayerDrawable layersDrawable;
@Override
public void onPageScrollStateChanged(int state) {
if(state==ViewPager.SCROLL_STATE_DRAGGING){
}else if(state==ViewPager.SCROLL_STATE_IDLE){
currentPage = pager.getCurrentItem();
setBackground(new ColorDrawable(colors[currentPage%4]));
layersDrawable = null;
}
}
@Override
public void onPageScrolled(int pos, float positionOffset, int positionPixels) {
if(positionOffset==0) return;
if(layersDrawable==null){
int bottomColor;
Log.i("POSITION", currentPage+" "+pos);
if(pos<currentPage){
//scroll left
bottomColor = colors[(currentPage+3)%4];
}else{
bottomColor = colors[(currentPage+1)%4];
}
ColorDrawable bottom = new ColorDrawable(bottomColor);
ColorDrawable top = new ColorDrawable(colors[currentPage%4]);
Log.i("COLOR", "TOP:"+colors[currentPage%4]);
Drawable[] layers = {bottom, top};
layersDrawable = new LayerDrawable(layers);
setBackground(layersDrawable);
}
ColorDrawable top = (ColorDrawable)layersDrawable.getDrawable(1);
top.setAlpha((int)(255*(1-positionOffset)));
}
Это действительно странно ... Можете ли вы понять, что я сделал не так?