见到这个动画是不是有点心动,想必你和我当初刚看到这个动画的时间的感觉是一样的,激动啊,不用自己写代码来控制滑动还有选中扩大和颜色变化了,并且还有这么多动画效果。现在,我来做一次搬运工,来介绍一下这个非常好用的空间MagicInditor.
首先先上GitHub地址 https://github.com/hackware1993/MagicIndicator
这是依赖的方式,两种选其中一种,当然我是推荐第二种的啦,用Android Studio的人都知道
dependencies {
compile project(':magicindicator')
}
repositories { ... maven { url "https://jitpack.io" } } dependencies { ... compile 'com.github.hackware1993:MagicIndicator:1.5.0' }
导入成功后,就可以使用啦。你需要先在布局文件里引入 MagicIndicator
再在代码里面找到它,并进行简单设置:
final MagicIndicator magicIndicator = (MagicIndicator) findViewById(R.id.magic_indicator);
final CommonNavigator commonNavigator = new CommonNavigator(this);
commonNavigator.setAdapter(new CommonNavigatorAdapter() {
@Override
public int getCount() {
return mDataList == null ? 0 : mDataList.size();
}
@Override
public IPagerTitleView getItemView(Context context, final int index) {
ClipPagerTitleView clipPagerTitleView = new ClipPagerTitleView(context);
clipPagerTitleView.setText(mDataList.get(index));
clipPagerTitleView.setTextColor(Color.parseColor("#f2c4c4"));
clipPagerTitleView.setClipColor(Color.WHITE);
clipPagerTitleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPager.setCurrentItem(index);
}
});
return clipPagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
return null; // 没有指示器,因为title的指示作用已经很明显了
}
});
magicIndicator.setNavigator(commonNavigator);
这样,你就可以轻松的实现效果图中 今日头条 式(效果图中第一个)切换效果。
额,上面这代码明显没有和 ViewPager 相关联,因此滑动 ViewPager 时是看不到切换效果的,我们给 ViewPager 添加一个监听器:
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
magicIndicator.onPageSelected(position);
}
@Override
public void onPageScrollStateChanged(int state) {
magicIndicator.onPageScrollStateChanged(state);
}
});
mPager.setCurrentItem(1);
MagicIndicator can be easily extended:
- implement IPagerTitleView to customize tab:
public class MyPagerTitleView extends View implements IPagerTitleView { public MyPagerTitleView(Context context) { super(context); } @Override public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { } @Override public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { } @Override public void onSelected(int index, int totalCount) { } @Override public void onDeselected(int index, int totalCount) { } }
- implement IPagerIndicator to customize indicator:
public class MyPagerIndicator extends View implements IPagerIndicator { public MyPagerIndicator(Context context) { super(context); } @Override public void onPageSelected(int position) { } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } @Override public void onPositionDataProvide(List<PositionData> dataList) { } }
上面是在GItHub上摘抄的扩展方式,可以看出这个控件的课操控性是非常强的,能满足大部分产品经理的需求了。
由于本人比较懒,这篇文章的代码是摘抄于https://www.jianshu.com/p/2865812fed41中的,主要是让大家知道这个那么好用的控件而已,纯属搬运工