序
今天周二 ,早上在地铁的时候听见好几个小伙伴说 " 今天起晚了 、赶紧走快迟到了 、这个点人怎么这么多呢 ?" 。
最近在做一个功能 ,轮次跟下方的直播列表功能不进行联动 。
方案一 : 可以用 RecyclerView 实现这个效果 ,但是在点击的时候需要自己去定位 。
方案二 :因为项目中使用的是统一的 MagicIndicator ,所以采用单独使用 MagicIndicator 并且不跟 ViewPager 相关联 。
过程
首先回想一下使用 MagicIndicator + ViewPager 的代码 ,重点是最后一行代码 。
ViewPagerHelper.bind(magicIndicator, mViewPager);
第一次我是把这行代码给注释了 ,结果 Magicindicator 不能滑动也不能实现选中效果 ,只剩下 ViewPager 在滑动 。
看一下 bind 这个函数做了什么操作 。
/**
* 简化和ViewPager绑定
* Created by hackware on 2016/8/17.
*/
public class ViewPagerHelper {
public static void bind(final MagicIndicator magicIndicator, ViewPager viewPager) {
viewPager.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);
}
});
}
}
PS :ViewPager 的事件回调给 MagicIndicator ,等于说是把 ViewPager 的事件绑定在 MagicIndicator ,如果绑定给注释那肯定是没有选中的 。
最后修改的地方是
commonNavigator.setAdapter(new CommonNavigatorAdapter() {
@Override
public int getCount() {
return mDataList.size();
}
@Override
public IPagerTitleView getTitleView(Context context, final int index) {
CommonPagerTitleView commonPagerTitleView = new CommonPagerTitleView(context);
// load custom layout
View customLayout = LayoutInflater.from(context).inflate(R.layout.simple_pager_title_layout, null);
final ImageView titleImg = (ImageView) customLayout.findViewById(R.id.title_img);
final TextView titleText = (TextView) customLayout.findViewById(R.id.title_text);
titleImg.setImageResource(R.mipmap.ic_launcher);
titleText.setText(mDataList.get(index));
commonPagerTitleView.setContentView(customLayout);
commonPagerTitleView.setOnPagerTitleChangeListener(new CommonPagerTitleView.OnPagerTitleChangeListener() {
@Override
public void onSelected(int index, int totalCount) {
titleText.setTextColor(Color.WHITE);
}
@Override
public void onDeselected(int index, int totalCount) {
titleText.setTextColor(Color.RED);
}
@Override
public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) {
titleImg.setScaleX(1.3f + (0.8f - 1.3f) * leavePercent);
titleImg.setScaleY(1.3f + (0.8f - 1.3f) * leavePercent);
}
@Override
public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) {
titleImg.setScaleX(0.8f + (1.3f - 0.8f) * enterPercent);
titleImg.setScaleY(0.8f + (1.3f - 0.8f) * enterPercent);
}
});
commonPagerTitleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// mViewPager.setCurrentItem(index);
magicIndicator.onPageSelected(index);
magicIndicator.onPageScrolled(index, 0.0F, 0);
}
});
return commonPagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
return null;
}
});
PS :可以理解为在 TAB 的点击事件里面回调本应跟 ViewPager 绑定的代码 。
magicIndicator.onPageSelected(index);
magicIndicator.onPageScrolled(index, 0.0F, 0);
END 、