1、要导入代码或引用包
compile project(':magicindicator')
repositories {
...
maven {
url "https://jitpack.io"
}
}
dependencies {
...
compile 'com.github.hackware1993:MagicIndicator:1.5.0'
}
2、如果使用指示器和ViewPage结合使用,则先建一个枚举保存频道
public enum CHANNEL {
MY("我的", 0x01),
DISCORY("发现", 0x02),
FRIEND("朋友", 0x03),
VIDEO("视频", 0x04);
//所有类型标识
public static final int MINE_ID = 0x01;
public static final int DISCORY_ID = 0x02;
public static final int FRIEND_ID = 0x03;
public static final int VIDEO_ID = 0x04;
private final String key;
private final int value;
CHANNEL(String key, int value) {
this.key = key;
this.value = value;
}
public int getValue() {
return value;
}
public String getKey() {
return key;
}
}
3、使用数组保存频道值
private static final CHANNEL[] CHANNELS =
new CHANNEL[]{CHANNEL.MY, CHANNEL.DISCORY, CHANNEL.FRIEND};
4、添加带颜色渐变和缩放的指示器标题的ScaleTransitionPagerTitleView
ScaleTransitionPagerTitleView.java
import android.content.Context;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.titles.ColorTransitionPagerTitleView;
/**
* 带颜色渐变和缩放的指示器标题
* 博客: http://hackware.lucode.net
* Created by hackware on 2016/6/26.
*/
public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView {
private float mMinScale = 0.9f;
public ScaleTransitionPagerTitleView(Context context) {
super(context);
}
@Override
public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) {
super.onEnter(index, totalCount, enterPercent, leftToRight); // 实现颜色渐变
setScaleX(mMinScale + (1.0f - mMinScale) * enterPercent);
setScaleY(mMinScale + (1.0f - mMinScale) * enterPercent);
}
@Override
public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) {
super.onLeave(index, totalCount, leavePercent, leftToRight); // 实现颜色渐变
setScaleX(1.0f + (mMinScale - 1.0f) * leavePercent);
setScaleY(1.0f + (mMinScale - 1.0f) * leavePercent);
}
public float getMinScale() {
return mMinScale;
}
public void setMinScale(float minScale) {
mMinScale = minScale;
}
}
5、初始化指示器
initMagicIndicator();
private void initMagicIndicator() {
MagicIndicator magicIndicator = findViewById(R.id.magic_indicator);
magicIndicator.setBackgroundColor(Color.WHITE);
CommonNavigator commonNavigator = new CommonNavigator(this);
commonNavigator.setAdjustMode(true);
commonNavigator.setAdapter(new CommonNavigatorAdapter() {
@Override
public int getCount() {
return CHANNELS == null ? 0 : CHANNELS.length;
}
@Override
public IPagerTitleView getTitleView(Context context, final int index) {
SimplePagerTitleView simplePagerTitleView = new ScaleTransitionPagerTitleView(context);
simplePagerTitleView.setText(CHANNELS[index].getKey());
simplePagerTitleView.setTextSize(19);
simplePagerTitleView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
simplePagerTitleView.setNormalColor(Color.parseColor("#999999"));
simplePagerTitleView.setSelectedColor(Color.parseColor("#333333"));
simplePagerTitleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mViewPager.setCurrentItem(index);
}
});
return simplePagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
return null;
}
@Override
public float getTitleWeight(Context context, int index) {
return 1.0f;
}
});
magicIndicator.setNavigator(commonNavigator);
ViewPagerHelper.bind(magicIndicator, mViewPager);
}
6、编写ViewPage适配器
继承FragmentPagerAdapter 还是FragmentStatePagerAdapter
应先考虑页面数是否超过3页,超过用后者。
/**
* 首页ViewPage适配器
*/
public class HomePagerAdapter extends FragmentPagerAdapter {
private CHANNEL[] mList;
public HomePagerAdapter(FragmentManager fm, CHANNEL[] datas) {
super(fm);
mList = datas;
}
//这种方式,避免一次性创建所有的framgent
@Override
public Fragment getItem(int position) {
int type = mList[position].getValue();
switch (type) {
case CHANNEL.MINE_ID:
return MineFragment.newInstance();
case CHANNEL.DISCOVERY_ID:
return DiscoryFragment.newInstance();
case CHANNEL.FRIEND_ID:
return FriendFragment.newInstance();
// case CHANNEL.VIDEO_ID:
// return VideoFragment.newInstance();
}
return null;
}
@Override
public int getCount() {
return mList == null ? 0 : mList.length;
}
}
7、ViewPage初始化
mViewPager = findViewById(R.id.view_pager);
mAdapter = new HomePagerAdapter(getSupportFragmentManager(),CHANNELS);
mViewPager.setAdapter(mAdapter);
initMagicIndicator();