使用这个布局需要引用库
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&¤t >= (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代表停留(这个事件可操作、可不操作)。
完成类似这样的效果,我只显示了其中的三页,类似布局自己代替即刻