【领券联盟】笔记:视频29,30-实现轮播图
破小布的小花狗
发表于
2020-03-31 00:46
1790
课堂笔记
课堂笔记
编写轮播图的适配器
- 在 fragment_home_pager 布局中添加 looper_pager
<androidx.viewpager.widget.ViewPager
android:id="@+id/looper_pager"
android:layout_width="match_parent"
android:layout_height="125dp"
android:overScrollMode="never" />
- 绑定 looper_pager
@BindView(R.id.looper_pager)
public ViewPager looperPager;
- 给 looperPager 创建添加适配器 LooperPagerAdapter,并重写 instantiateItem 和 destroyItem 方法
public class LooperPagerAdapter extends PagerAdapter {
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
return ...;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
}
@Override
public int getCount() {
return 0;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return false;
}
}
处理轮播图的数据
- 轮播图的数据用的是 HomeViewPager 每页的最后5个数据
private void handleHomePagerContentResult(HomePagerContent pagerContent, int categoryId) {
List<HomePagerContent.DataBean> data = pagerContent.getData();
for (ICategoryPagerCallback callback : callbacks) {
if (callback.getCategoryId() == categoryId) {
if (pagerContent == null || pagerContent.getData().size() == 0) {
callback.onEmpty();
} else {
//拆分DataBean,拿到looperData的数据集合
List<HomePagerContent.DataBean> looperData = data.subList(data.size() - 5, data.size());
callback.onLooperListLoaded(looperData);
callback.onContentLoaded(data);
}
}
}
}
- onLooperListLoaded 通过接口拿到数据后,创建方法 setData 把数据给 LooperPagerAdapter
@Override
public void onLooperListLoaded(List<HomePagerContent.DataBean> contents) {
mLooperPagerAdapter.setData(contents);
}
- LooperPagerAdapter 创建集合保存数据,并显示数据(创建图片详情看代码注释)
public class LooperPagerAdapter extends PagerAdapter {
private List<HomePagerContent.DataBean> mData = new ArrayList<>();
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
Context context = container.getContext();
HomePagerContent.DataBean dataBean = mData.get(position);
//创建图片
ImageView iv = new ImageView(context);
//加载图片数据
Glide.with(context).load(UrlUtils.getCoverPath(dataBean.getPict_url())).into(iv);
//创建布局
ViewGroup.LayoutParams layoutParams =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
//给图片设置布局
iv.setLayoutParams(layoutParams);
//给图片设置比例类型
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
//添加图片到container
container.addView(iv);
return iv;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
public void setData(List<HomePagerContent.DataBean> contents) {
mData.clear();
mData.addAll(contents);
notifyDataSetChanged();
}
}