Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android 中使用RecyclerView实现底部翻页大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

最近在做pad端的app,需要一个像网页一样效果,之前使用addView方式,页码少的时候还可以,能实现效果,但是碰到了一个1000多页的界面,就GG了,页码半天显示不出来,于是使用RecyclerView作为容器,主要是看中RecyclerView的复用,不说了,看代码

BottomPagerView xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://scheR_321_11845@as.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
 <LinearLayout
  android:id="@+id/bottom_ll_content"
  android:layout_gravity="center_vertical"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:gravity="center_vertical"
  android:layout_marginLeft="10px"
  android:layout_marginRight="10px"
  android:layout_marginTop="10px"
  android:orientation="horizontal">
  <Button
   android:id="@+id/pre_page"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginRight="@dimen/y5"
   android:paddingBottom="@dimen/x4"
   android:paddingLeft="@dimen/y5"
   android:paddingRight="@dimen/y5"
   android:paddingTop="@dimen/x4"
   android:text="上一页"
   android:textSize="@dimen/middlesize"/>
  <android.support.v7.widget.RecyclerView
   android:id="@+id/recycler"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
  <Button
   android:id="@+id/next_page"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_marginLeft="@dimen/y5"
   android:paddingBottom="@dimen/x4"
   android:paddingLeft="@dimen/y5"
   android:paddingRight="@dimen/y5"
   android:paddingTop="@dimen/x4"
   android:text="下一页"
   android:textSize="@dimen/middlesize"/>
 </LinearLayout>
</LinearLayout>

adapter的xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://scheR_321_11845@as.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
 <RadioButton
  android:id="@+id/bottom_item_rb"
  android:layout_width="wrap_content"
  android:text="1"
  android:gravity="center_vertical"
  android:BACkground="@drawable/tab_SELEct"
  android:layout_height="wrap_content"/>
</LinearLayout>
BottomPagerView 代码:
public class BottomPagerView extends LinearLayout {
 private final LinearLayout ll_content;
 privatE int pageSize = 0;
 private Button pre_page;
 private Button next_page;
 private RecyclerView recycler;
 private BottomAdapter mBottomAdapter;
 Context mContent;
 private Boolean mShouldScroll = false;
 privatE int mToPosition = 0;
 privatE int smoothWidth = 0;
 public BottomPagerView(Context context) {
  this(context,null);
 }
 public BottomPagerView(Context context,@Nullable AttributeSet attrs) {
  super(context,attrs);
  this.mContent = context;
  LayoutInflater.from(context).inflate(R.layout.bottom_page,this,truE);
  ll_content = (LinearLayout) findViewById(R.id.bottom_ll_content);
  pre_page = (Button) findViewById(R.id.pre_pagE);
  next_page = (Button) findViewById(R.id.next_pagE);
  recycler = (RecyclerView) findViewById(R.id.recycler);
  /*initView(context);*/
 }
 public BottomPagerView(Context context,@Nullable AttributeSet attrs,int defStyleAttr) {
  this(context,attrs);
 }
 privatE int currentPage = 0;
 public void initView(final Context context) {
  if (pageSize == 0) {
   ll_content.setVisibility(INVISIBLE);
  } else {
   ll_content.setVisibility(VISIBLE);
   final List<BottomBean> list = new ArrayList<>();
   for (int i = 0; i < pageSize; i++) {
    BottomBean bean = new BottomBean();
    bean.setPosition(i);
    if (i == 0) {
     bean.setSELEct(true);
    } else {
     bean.setSELEct(false);
    }
    list.add(bean);
   }
   final linearlayoutmanager manager = new linearlayoutmanager(context);
   manager.setOrientation(linearlayoutmanager.HORIZONTAL);
   recycler.setLayoutManager(manager);
   int width = 0;
   if (pageSize > 8) {
    int pixelSize = getresources().getDimensionPixelSize(R.dimen.y6);
    width = pixelSize * 10;
   } else {
    width = LayoutParams.WRAP_CONTENT;
   }
   LayoutParams params = new LayoutParams(width,ViewGroup.LayoutParams.WRAP_CONTENT);
   recycler.setLayoutParams(params);
   mBottomAdapter = new BottomAdapter(context,list);
   recycler.setAdapter(mBottomAdapter);
   mBottomAdapter.setCurPage(new BottomAdapter.getCurPage() {
    @Override
    public void serCurPage(int p) {
     list.get(currentPagE).setSELEct(false);
     list.get(p).setSELEct(true);
     mBottomAdapter.notifyDataSetChanged();
     currentPage = p;
     smoothMoveToPosition(recycler,p);
     recycler.addOnScrollListener(new RecyclerView.onScrollListener() {
      @Override
      public void onScrollStateChanged(RecyclerView recyclerView,int newStatE) {
       super.onScrollStateChanged(recyclerView,newStatE);
       if (mShouldScroll){
        mShouldScroll = false;
        smoothMoveToPosition(recycler,mToPosition);
       }
      }
     });
     if (Curpage != null) {
      Curpage.serCurPage(p);
     }
    }
   });
   pre_page.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
     if (currentPage > 0) {
      int page = currentPage - 1;
      list.get(currentPagE).setSELEct(false);
      list.get(pagE).setSELEct(true);
      currentPage = page;
      mBottomAdapter.notifyDataSetChanged();
      smoothMoveToPosition(recycler,pagE);
      recycler.addOnScrollListener(new RecyclerView.onScrollListener() {
       @Override
       public void onScrollStateChanged(RecyclerView recyclerView,int newStatE) {
        super.onScrollStateChanged(recyclerView,newStatE);
        if (mShouldScroll){
         mShouldScroll = false;
         smoothMoveToPosition(recycler,mToPosition);
        }
       }
      });
      if (Curpage != null) {
       Curpage.serCurPage(pagE);
      }
     } else {
      return;
     }
    }
   });
   next_page.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
     if (currentPage < pageSize - 1) {
      list.get(currentPagE).setSELEct(false);
      int page = currentPage + 1;
      Log.d("BottomPagerView","onClick: " + pagE);
      list.get(pagE).setSELEct(true);
      currentPage = page;
      mBottomAdapter.notifyDataSetChanged();
      smoothMoveToPosition(recycler,mToPosition);
        }
       }
      });
      if (Curpage != null) {
       Curpage.serCurPage(pagE);
      }
     } else {
      return;
     }
    }
   });
  }
 }
 public void setPageSize(int sizE) {
  this.pageSize = size;
  initView(mContent);
 }
 private getCurPage Curpage;
 public interface getCurPage {
  void serCurPage(int p);
 }
 public void setCurPage(getCurPage pagE) {
  this.Curpage = page;
 }
 private void smoothMoveToPosition(RecyclerView mRecyclerView,final int position) {
  int firstItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(0));
  int lastItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(mRecyclerView.getChildCount()-1 ));
  Log.d("BottomPagerView","smoothMoveToPosition: firstItem"+firstItem+"  lastItem "+lastItem+"  position"+position);
  if (position < firstItem) {
   mRecyclerView.smoothScrollToPosition(position);
   mShouldScroll = true;
   mToPosition = position;
  } else if (position <= lastItem) {
// 跳转位置在第一个可见项之后,最后一个可见项之前
// smoothScrollToPosition根本不会动,此时调用smoothScrollBy来滑动到指定位置
   int movePosition = position - firstItem;
   if (movePosition >= 0 && movePosition <= mRecyclerView.getChildCount()) {
    int top = mRecyclerView.getChildAt(movePosition).getLeft();
    int width = mRecyclerView.getMeasuredWidth() / 2;
    int scroll = top - width+mRecyclerView.getChildAt(movePosition).getMeasuredWidth()/2;
    Log.d("BottomPagerView","smoothMove: "+scroll);
    mRecyclerView.smoothScrollBy(scroll,0);
   }
  } else {
   mRecyclerView.smoothScrollToPosition(position);
   mShouldScroll = true;
   mToPosition = position;
  }
 }
}
BottomAdapter adapter:
public class BottomAdapter extends RecyclerView.Adapter<BottomAdapter.MyViewHolder> {
 Context mContext;
 List<BottomBean> size;
 private Boolean isFirst = true;
 privatE int currentPage = 0;
 public BottomAdapter(Context context,List<BottomBean> sizE) {
  this.mContext = context;
  this.size = size;
 }
 @Override
 public MyViewHolder onCreateViewHolder(ViewGroup parent,int viewTypE) {
  View view = View.inflate(mContext,R.layout.bottom_item,null);
  return new MyViewHolder(view);
 }
 @Override
 public void onBindViewHolder(final MyViewHolder holder,final int position) {
  holder.rb.setButtonDrawable(null);
  holder.rb.setText(position + 1 + "");
  holder.rb.setTag(position);
  holder.rb.setchecked(size.get(position).isSELEct());
  holder.rb.setOnClickListener(new View.onClickListener() {
   @Override
   public void onClick(View v) {
    if (!size.get((int) holder.rb.getTag()).isSELEct()){
     Curpage.serCurPage((int) holder.rb.getTag());
    }
   }
  });
 }
 @Override
 public int getItemCount() {
  return size.size();
 }
 class MyViewHolder extends RecyclerView.ViewHolder {
  private final RadioButton rb;
  public MyViewHolder(View itemView) {
   super(itemView);
   rb = (RadioButton) itemView.findViewById(R.id.bottom_item_rb);
  }
 }
 private getCurPage Curpage;
 public interface getCurPage {
  void serCurPage(int p);
 }
 public void setCurPage(getCurPage pagE) {
  this.Curpage = page;
 }
}

调用

直接在xml中使用

<BottomPagerView
 android:id="@+id/part_part_tab"
 android:layout_width="wrap_content"
 android:layouT_Below="@+id/part_part_recycler"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"
 android:layout_marginBottom="5dp"/>

代码调用

初始化:

mBottomPagerView.setPageSize(AllPagE);

回调:

mBottomPagerView.setCurPage(new BottomPagerView.getCurPage() {
 @Override public void serCurPage(int p) {  //获取点击的页码数,操作
 }
});

总结

以上所述是小编给大家介绍的Android 中使用RecyclerView实现底部翻页,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时@L_616_28@大家的。在此也非常感谢大家对编程小技巧网站的支持

大佬总结

以上是大佬教程为你收集整理的Android 中使用RecyclerView实现底部翻页全部内容,希望文章能够帮你解决Android 中使用RecyclerView实现底部翻页所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。