通过网络请求json数据,根据数据创建图片和指示器
- 指示器小圆点跟随ViewPager联动
- 开启线程HandlerViewpager自动滚动
- 当用户手指滑动时,禁用自动滚动
运行效果:
代码实现:
xml文件
<FrameLayout
android:layout_width="match_parent"
android:layout_height="150dp">
<android.support.v4.view.ViewPager
android:id="@+id/recommend_viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:orientation="horizontal"
android:layout_marginRight="20dp"
android:layout_marginBottom="20dp"
android:layout_gravity="bottom|right"
android:id="@+id/recommend_pager_indicator"
android:layout_width="wrap_content"
android:layout_height="10dp"/>
</FrameLayout>
/**
* Created by fushuang on 2016/11/10.
*/
public class RecommendBannerAdapter extends PagerAdapter {
private static final String TAG = "RecommendBannerAdapter";
private Context mContext;
private List<RecommendBanner.DataBean> mList;
public RecommendBannerAdapter(Context context, List<RecommendBanner.DataBean> list) {
mContext = context;
mList = list;
}
@Override
public int getCount() {
int ret = 0;
if (mList.size() > 0) {
return 10000;
}
return ret;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
position = position % mList.size();
Log.d(TAG, "instantiateItem: "+position);
RecommendBanner.DataBean dataBean = mList.get(position);
String image = dataBean.getImage();
ImageView imageView = new ImageView(mContext);
Picasso.with(mContext).load(image).into(imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
Fragment
private List<RecommendEntry.ResultBean> mResult = new ArrayList<>();
private List<RecommendBanner.DataBean> mBannerList = new ArrayList<>();
private List<ImageView> mIndicatorList = new ArrayList<>();
private RecommendBannerAdapter mBannerAdapter;
private LinearLayout mLinearLayout;
private boolean autoPlay = true;
private Handler mHandler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
switch (msg.what) {
case 1:
int currentItem = mViewPager.getCurrentItem();
Log.d(TAG, "dispatchMessage: currentItem" + currentItem);
mViewPager.setCurrentItem(++currentItem);
break;
}
}
};
private ViewPager mViewPager;
private Thread mThread;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_recommend, container, false);
mViewPager = (ViewPager) view.findViewById(R.id.recommend_viewpager);
mViewPager.addOnPageChangeListener(this);
mViewPager.setOnTouchListener(this);
mBannerAdapter = new RecommendBannerAdapter(getActivity(), mBannerList);
mViewPager.setAdapter(mBannerAdapter);
mLinearLayout = (LinearLayout) view.findViewById(R.id.recommend_pager_indicator);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recommend_recyclerView);
LinearLayoutManager lm = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(lm);
recyclerView.setAdapter(mAdapter);
mRefreshLayout = ((SwipeRefreshLayout) view.findViewById(R.id.recommend_refresh_layout));
mRefreshLayout.setOnRefreshListener(this);
mThread = new Thread() {
@Override
public void run() {
while (true) {
mHandler.sendEmptyMessage(1);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
mThread.start();
return view;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onReceiveRecommendBannerJson(RecommendBanner banner) {
mRefreshLayout.setRefreshing(false);
if (banner.getCode() == 0) {
List<RecommendBanner.DataBean> list = banner.getData();
mBannerList.clear();
mIndicatorList.clear();
mLinearLayout.removeAllViews();
mBannerList.addAll(list);
mBannerAdapter.notifyDataSetChanged();
for (int i = 0; i < mBannerList.size(); i++) {
ImageView imageView = new ImageView(getActivity());
imageView.setImageResource(R.drawable.indicator_no_select);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20);
params.setMargins(5, 0, 5, 0);
imageView.setLayoutParams(params);
mIndicatorList.add(imageView);
mLinearLayout.addView(imageView);
}
Log.d(TAG, "onReceiveRecommendBannerJson: mBannerList" + mBannerList.size());
Log.d(TAG, "onReceiveRecommendBannerJson: mIndicatorList" + mIndicatorList.size());
}
}