package com.c9mj.platform.explore.adapter; import android.support.v4.view.ViewPager; import android.view.View; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.c9mj.platform.R; import com.c9mj.platform.explore.mvp.model.bean.ExploreListItemBean; import com.c9mj.platform.widget.inicator.ScaleCircleNavigator; import com.chad.library.adapter.base.BaseMultiItemQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import net.lucode.hackware.magicindicator.MagicIndicator; import net.lucode.hackware.magicindicator.ViewPagerHelper; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import io.reactivex.Flowable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; /** * Created by Administrator on 2016/11/4. */ public class ExploreListAdapter extends BaseMultiItemQuickAdapter<ExploreListItemBean, BaseViewHolder> { private boolean isAutoScrolled = true; private ViewPager viewPager; private BaseViewHolder viewHolder; private ExploreListItemBean bean; private final ViewPager.OnPageChangeListener pageChangeListener = new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if (position == 0) { viewHolder.setText(R.id.tv_title, bean.getTitle()); return; } if (bean.getAds() != null && bean.getAds().size() != 0) { viewHolder.setText(R.id.tv_title, bean.getAds().get(position - 1).getTitle()); } } @Override public void onPageScrollStateChanged(int state) { switch (state) { case ViewPager.SCROLL_STATE_DRAGGING: isAutoScrolled = false; break; case ViewPager.SCROLL_STATE_SETTLING: isAutoScrolled = false; break; case ViewPager.SCROLL_STATE_IDLE: isAutoScrolled = true; break; } } }; private boolean isSubscribe = false; private Consumer<Long> consumer = new Consumer<Long>() { @Override public void accept(Long integer) throws Exception { if (!isAutoScrolled) { return; } int current = viewPager.getCurrentItem(); if (current + 1 == viewPager.getChildCount()) { viewPager.setCurrentItem(0, true); } else { viewPager.setCurrentItem(current + 1, true); } } }; private Flowable flowable = Flowable .interval(3, 3, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()); public ExploreListAdapter(List<ExploreListItemBean> data) { super(data); addItemType(ExploreListItemBean.ADS, R.layout.item_explore_list_ads_layout); addItemType(ExploreListItemBean.NORMAL, R.layout.item_explore_list_normal_layout); } @Override protected void convert(final BaseViewHolder viewHolder, final ExploreListItemBean bean) { switch (viewHolder.getItemViewType()) { case ExploreListItemBean.ADS: List<View> viewList = new ArrayList<>(); ImageView iv_head = new ImageView(mContext); Glide.with(mContext) .load(bean.getImgsrc()) .crossFade() .centerCrop() .into(iv_head); viewList.add(iv_head); if (bean.getAds() != null) { for (ExploreListItemBean.AdsBean ads : bean.getAds()) { ImageView iv_ads = new ImageView(mContext); Glide.with(mContext) .load(ads.getImgsrc()) .crossFade() .centerCrop() .into(iv_ads); viewList.add(iv_ads); } } this.viewPager = viewHolder.getView(R.id.viewpager); this.viewHolder = viewHolder; this.bean = bean; final ExploreAdsAdapter pageAdapter = new ExploreAdsAdapter(viewList); viewPager.setOffscreenPageLimit(4); viewPager.setAdapter(pageAdapter); viewHolder.setText(R.id.tv_title, bean.getTitle()); viewPager.addOnPageChangeListener(pageChangeListener); //MagicIndicator MagicIndicator magicIndicator = viewHolder.getView(R.id.magic_indicator); magicIndicator.setVisibility(viewList.size() != 1 ? View.VISIBLE : View.GONE); ScaleCircleNavigator navigator = new ScaleCircleNavigator(mContext); navigator.setFollowTouch(true); navigator.setCircleCount(viewList.size()); magicIndicator.setNavigator(navigator); ViewPagerHelper.bind(magicIndicator, viewPager); viewHolder.addOnClickListener(R.id.viewpager); // viewPager.setCurrentItem(0); // pageChangeListener.onPageScrollStateChanged(ViewPager.SCROLL_STATE_IDLE); if (!isSubscribe) { flowable.subscribe(consumer); isSubscribe = true; } break; case ExploreListItemBean.NORMAL: viewHolder.setText(R.id.tv_title, bean.getTitle()) .setText(R.id.tv_source, bean.getSource()); Glide.with(mContext) .load(bean.getImgsrc()) .crossFade() .centerCrop() .into((ImageView) viewHolder.getView(R.id.iv_img)); break; default: break; } } }