类似小说网站分页布局工具

使用这个布局需要引用库
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'

这是recyclerview和他的快速适配器模板

Page2Layout.java
public class Page2Layout extends LinearLayout {
    LinearLayout layout;
    int totalPage =0;
    int current=1;
    List<Map<String,Object>> pageData=new ArrayList<>();
    Map<String,Object> pageMap;
    PageAdapter pageAdapter;
    RecyclerView pageRc;
    private TextView tvPage;
    private pageListener pageListener;
    private Button btnFirst;
    private Button btnLast;

    public void setPageListener(Page2Layout.pageListener pageListener) {
        this.pageListener = pageListener;
    }

    public interface pageListener{
        void selected(int i);
    }

    public Page2Layout(Context context) {
        super(context);
    }

    public Page2Layout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public void setTotalPage(int total,Context context){
        this.totalPage=total;
        initView(context);
    }

    private void initView(Context context){
        if (layout==null){
            layout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.layout_page, this);
        }
        tvPage=layout.findViewById(R.id.layout_page_tv_page);
        setText();
        btnFirst = layout.findViewById(R.id.layout_page_btn_first);
        btnFirst.setOnClickListener(v -> {
            current = 1;
            pageListener.selected(1);
        });
        btnLast = layout.findViewById(R.id.layout_page_btn_last);
        btnLast.setOnClickListener(v -> {
            current = totalPage;
            pageListener.selected(totalPage);
        });
        LinearLayout imForaward=layout.findViewById(R.id.layout_page_im_pageforaward);
        LinearLayout imBack=layout.findViewById(R.id.layout_page_im_pageback);
        pageRc=layout.findViewById(R.id.layout_page_rc_page);
        imForaward.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                pageAdapter.forward();
            }
        });
        imBack.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                pageAdapter.back();
            }
        });

        setPage(current);

        pageAdapter = new PageAdapter(R.layout.item_page,pageData);
        pageAdapter.setCurrent(current);
        pageAdapter.setTotal(totalPage);
        pageAdapter.setPageAdapterListener(new PageAdapter.PageAdapterListener() {
            @Override
            public void back(int page) {
                current = page;
                pageListener.selected(current);
            }

            @Override
            public void forward(int page) {
                current = page;
                pageListener.selected(current);
            }

            @Override
            public void stay(int page) {
                current = page;
                pageListener.selected(current);
            }
        });
        pageRc.setLayoutManager(new LinearLayoutManager(getContext(),RecyclerView.HORIZONTAL,false));
        pageRc.setAdapter(pageAdapter);
    }

    private void setPage(int i){

        if (i<=1){
            pageData.clear();
            if (totalPage>=3){
                for (int i1 = 1; i1<4;i1++){
                    Map<String,Object> map = new HashMap<>();
                    map.put("number",i1);
                    pageData.add(map);
                }
            }else {
                for (int i1 = 1; i1<totalPage+1;i1++){
                    Map<String,Object> map = new HashMap<>();
                    map.put("number",i1);
                    pageData.add(map);
                }
            }

        }else {
            int page;
            if (pageData.size()>2&&current >= (int)pageData.get(2).get("number")){
                if (current+2<totalPage){
                    page=current+3;

                }else {
                    page=totalPage+1;
                }
                pageData.clear();
                for (int i1 = current; i1<page;i1++){
                    Map<String,Object> map = new HashMap<>();
                    map.put("number",i1);
                    pageData.add(map);
                }
            }else if (current <= (int)pageData.get(0).get("number")){

                if (current==2&&pageData.size()>2){
                    pageData.clear();
                    for (int i1 = current-1; i1<current+2;i1++){
                        Map<String,Object> map = new HashMap<>();
                        map.put("number",i1);
                        pageData.add(map);
                    }
                }else {
                    pageData.clear();
                    for (int i1 = current-2; i1<current+1;i1++){
                        Map<String,Object> map = new HashMap<>();
                        map.put("number",i1);
                        pageData.add(map);
                    }
                }

            }
        }
    }


    public void setText(){
        tvPage.setText("共"+totalPage+"页");
    }
}

加载其中可点击的页数,用到了recyclerview,下面是adapter

public class PageAdapter extends BaseQuickAdapter<Map<String,Object>, BaseViewHolder> {

    private PageAdapterListener pageAdapterListener;
    private int current = 0;
    private int total = 0;

    public void setPageAdapterListener(PageAdapterListener pageAdapterListener) {
        this.pageAdapterListener = pageAdapterListener;
    }

    public void setCurrent(int current) {
        this.current = current;
    }

    public int getCurrent() {
        return current;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public interface PageAdapterListener{
        void back(int page);
        void forward(int page);
        void stay(int page);
    }

    public PageAdapter(@LayoutRes int layoutResId, @Nullable List<Map<String,Object>> data) {
        super(layoutResId, data);
    }

    public PageAdapter(@LayoutRes int layoutResId) {
        super(layoutResId);
    }


    @Override
    protected void convert(@NotNull BaseViewHolder baseViewHolder, Map<String, Object> map) {
        baseViewHolder.setText(R.id.item_page_tv_number, StringUtils.getNotNull(map.get("number")));
        TextView tvNumber=baseViewHolder.getView(R.id.item_page_tv_number);
        if (current == (int)map.get("number")){
            tvNumber.setBackgroundResource(R.drawable.icon_personalinformation_pageonback);
            tvNumber.setTextColor(Color.parseColor("#FFFFFF"));
        }else {
            tvNumber.setBackgroundResource(R.drawable.icon_personalinformation_pageoffback);
        }
        baseViewHolder.getView(R.id.item_page_tv_number).setOnClickListener(v -> {
            current = (int)map.get("number");
            if (baseViewHolder.getAdapterPosition() == 1){
                pageAdapterListener.stay(current);
            }else if (baseViewHolder.getAdapterPosition() == 0){
                pageAdapterListener.back(current);
            }else {
                pageAdapterListener.forward(current);
            }
        });
    }

    public void forward(){
        if (current+1<=total){
            current = current+1;
            pageAdapterListener.forward(current);
        }else {

        }
    }

    public void back(){
        if (current-2<=0){
            current = 1;
            pageAdapterListener.back(current);
        }else {
            current = current-1;
            pageAdapterListener.back(current);
        }
    }
}

pageAdapterListener的forward代表下一页、back代表上一页、stay代表停留(这个事件可操作、可不操作)。

完成类似这样的效果,我只显示了其中的三页,类似布局自己代替即刻 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值