在做一个天气应用的时候,做了这么一个控件,就是滑动viewpager的时候,自动改变viewpager的背景颜色,以达到一个较好的视觉效果,具体的效果可以看我的应用。
现在简单说一下大概的思路。
其实没有太难的东西在里面,主要就是在滑动的时候,利用ValueAnimator来动态的改变viewpager的背景做的。
代码已开源,点击就可以得到,下面介绍下关键点。
/**
* 颜色的计算方法
* @param page 当前页面的索引
* @return 当前页的颜色和下一页的颜色
*/
private void calculateColors( int page ) {
int[] colors = new int[2];
colors[0] = BG_COLORS[ page % BG_COLORS.length ];
colors[1] = BG_COLORS[ ( page + 1 ) % BG_COLORS.length ];
createAnimation(colors);
}
/**
* 根据指定的颜色来创建颜色动画
* @param colors 指定的颜色
*/
private void createAnimation(int... colors) {
colorAnim = ObjectAnimator.ofInt(this, "backgroundColor", colors);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.setDuration(DURATION);
}
需要说明的是
- BG_COLORS是一个数组,用来保存每个页面的颜色值,可以通过setBgColors()方法来设置。
- DURATION 为1000毫秒。因为两个页面切换的时候onPageScrolled()方法的positionOffset参数取值是从0到1的。
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if( null != mlistener ) {
mlistener.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
if( lastScrollPage != position ) {
calculateColors(position);
}
lastScrollPage = position;
seek(positionOffset);
}
时间有点匆忙,先写到这里吧。