UI----实现京东首页轮播图

先看一下要实现的效果
在这里插入图片描述就是红色框框的部分,注意他是可以左右滑动的,单纯就这一部分来说,第一页的实现就是GridView网格布局,5列,10个item,因为可以左右滑动,因此可以使用ViewPager实现,整体的就是使用GridView+ViewPager实现。

(1)ViewPager的配置
在这里插入图片描述
关键的是要通过适配器,填充内容,内容就是GridView;

–>首先知道ViewPager需要几页,根据图知道每页是10个item,一共是2页,那么就先将GridView装在List集合中。
在这里插入图片描述
给ViewPager设置适配器
在这里插入图片描述
ViewPager适配器的代码:

public class MyPagerAdapter extends PagerAdapter {
    private final Context context;
    private final List<GridView> gridViewList;

    public MyPagerAdapter(Context context, List<GridView> gridViewList){
        this.context = context;
        this.gridViewList = gridViewList;
    }
    @Override
    public int getCount() {
        return gridViewList.size();
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        container.addView(gridViewList.get(position));
        return gridViewList.get(position);
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View) object);
    }
}

(2)给GridView设置适配器,显示数据
接下来重中之重,就是给GridView设置适配器
因为数据的总量肯定是超过1页的GridView的item总量,所以我们需要去分页加载,举个例子:

假设一共是32个数据,每页只显示10个数据,那么第0页(就是第1页,但是数组是从0开始)显示的数据就是,1-10,起始值是1,终点值是10;第2页起始值是11,终点至是20… 第 i 页起始值start是 i * item_num(每页的item数量),终点值是start + item_num;

所以在给GridView配置数据时,要分页处理数据,代码如下:

public class GridViewAdapter extends BaseAdapter {
    private  Context context;
    //第i页的数据集合
    private List<DataBean> list = new ArrayList<>();
    //每个GridView的最大item数
    private static final int item_num = 10;

    public GridViewAdapter(Context context, List<DataBean> gridList, int i){
        this.context = context;
        int start = i * item_num;
        int end = start + item_num;
        while((start < gridList.size()) && (start < end)){
            list.add(gridList.get(start));
            start++;
        }
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder = null;
        if(view == null){
            view = LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.item_grid, viewGroup,false);
            viewHolder = new ViewHolder();
            viewHolder.iv_back = view.findViewById(R.id.iv_back);
            viewHolder.tv_text = view.findViewById(R.id.tv_text);
            view.setTag(viewHolder);
        }else{
           viewHolder = (ViewHolder) view.getTag();
        }
       viewHolder.tv_text.setText(list.get(i).getText());
       viewHolder.iv_back.setImageResource(list.get(i).getIcon());
        return view;
    }

    static class ViewHolder{
        ImageView iv_back;
        TextView tv_text;
    }
}

然后给GridView设置适配器
在这里插入图片描述
GridView的item布局如下,当然也可以自己new GridView(this),没有问题的。

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="180dp"
    android:numColumns="5">

</GridView>

运行之后,实现下面的布局(因为不能做gif,所以只能看到一个页面的布局,抱歉)。
在这里插入图片描述
一个基本的布局已经形成,接下来把京东轮播页面的资源加载进来,不就迎刃而解了吗!
之前创建的一个DataBean类,就是用来封装一个item显示的text文本以及图片资源的。

public class DataBean {
    private String text;
    private int icon;

    public DataBean(String text, int icon) {
        this.text = text;
        this.icon = icon;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }
}

那么现在需要的就是把京东轮播图的资源封装到DataBean中。

 for (int i = 0; i < ids.length; i++) {
            gridList.add(new DataBean(text[i],
                    ids[i]));
        }

因为自己这边没有后台的接口,所以只能自己手写数据,但是没问题,还是能实现基本的UI的。
在这里插入图片描述
在这里插入图片描述
使用ViewPager+GridView实现京东首页的轮播图的效果就实现了,包括单击事件,设置单击事件监听即可。

发布了15 篇原创文章 · 获赞 5 · 访问量 636

猜你喜欢

转载自blog.csdn.net/qq_33235287/article/details/104127229