我将一个具有透明背景的 ViewPager 放在另一个背景视图上,当 ViewPager 滚动时,我以平滑的颜色过渡更改背景视图的颜色,例如:
- 在第 1 页上,背景为红色。
- 当 ViewPager 从第 1 页滚动到第 2 页时,我将背景替换为 LayerDrawable,顶部为红色,底部为蓝色。
- 在滚动过程中,我缩小了顶层的 alpha,显示了从红色到蓝色的过渡。
- 最后,在第 2 页上,滚动完成后,我将背景更改为 BLUE。
它按预期工作,但是当我向左滚动时,似乎底部和向上层是相反的。
这是我的代码:
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)));
}
这真的很奇怪...你能弄清楚我做错了什么吗?
我太
愚蠢了,我发现positionOffset
实际上是左侧显示的页面百分比,所以当向左滚动时,
top.setAlpha((int)(255*(1-positionOffset)));
应改为:
top.setAlpha((int)(255*positionOffset));