在上篇播客中實(shí)現(xiàn)了textview的字體變色婴梧,在上一篇的基礎(chǔ)上結(jié)合viewpager實(shí)現(xiàn)一個(gè)變色的viewpager指示器下梢,效果如下客蹋;
device-2017-06-25-172024.gif
上面指示器的文字在這里是動(dòng)態(tài)創(chuàng)建添加到LinearLayout布局中的,
for (int i = 0; i < items.length; i++) {
//動(dòng)態(tài)添加顏色跟蹤的textview
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.weight = 1;
ColorTextView colorTextView = new ColorTextView(this);
//設(shè)置顏色
colorTextView.setTextSize(20);
colorTextView.setChangeColor(Color.RED);
colorTextView.setText(items[i]);
//把新的加入LinearLayout容器中
colorTextView.setLayoutParams(params);
mIndicatorContainer.addView(colorTextView);
//加入集合
mIndicator.add(colorTextView);
}
創(chuàng)建完成后給viewpager設(shè)置相應(yīng)的適配器和添加一個(gè)滑動(dòng)監(jiān)聽(tīng)就可以了孽江,
設(shè)置viewpager適配器讶坯,
mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return ViewFragment.newInstance(items[position]);
}
@Override
public int getCount() {
return items.length;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
});
設(shè)置viewpager滑動(dòng)監(jiān)聽(tīng),
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
ColorTextView left = mIndicator.get(position);
left.setDirection(ColorTextView.Direction.RIGHT_TO_LEFT);
left.setCurrentProgress(1 - positionOffset);
try {
ColorTextView right = mIndicator.get(position + 1);
right.setDirection(ColorTextView.Direction.LEFT_TO_RIGHT);
right.setCurrentProgress(positionOffset);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
這里用的是addOnPageChangeListener岗屏,當(dāng)然用setOnPageChangeListener也可以辆琅,不過(guò)這個(gè)方法已經(jīng)過(guò)時(shí)了,在onPageScrolled方法中要注意float positionOffset这刷,它是根據(jù)滑動(dòng)時(shí)0-1的變化的值婉烟,所以剛好根據(jù)這個(gè)值計(jì)算當(dāng)前的進(jìn)度值,在設(shè)置右邊變色的時(shí)候暇屋,position + 1在最后一個(gè)的時(shí)候會(huì)導(dǎo)致數(shù)組角標(biāo)越界似袁,要做一個(gè)異常的捕獲,用if來(lái)判斷也可以咐刨,這樣整個(gè)效果就實(shí)現(xiàn)了昙衅。
源碼地址:http://pan.baidu.com/s/1nvyp0Hb