SuperSwipeRefreshLayout(非浸入式下拉刷新、上拉加载)

总概:
0,介绍场景
1,介绍简单使用效果
2,介绍简单使用方法
3,介绍定制View使用方法
4,参考
5,附上github地址

0,场景
   个人在网上找下拉刷新的,一看一大片的使用adapter实现下拉刷新的效果。
   然后想起之前使用RecyclerView添加头部和底部,是使用修改Adapter实现的。然后在使用addItemDecoration的时候,分割线出现bug --- 添加的头部和底部也出现分割线了
    因此,在实现上拉加载的时候,看到adapter实现的时候,真的听到心碎的声音了;幸好看到网上大神实现了定制ViewGroup,然后个人以此为基础,实现类似Google加载效果、添加适配器模式完成数据适配,完成以下动画效果
   因此,实现了非浸入式的上拉刷新以及下拉加载

1,简单使用效果(下拉刷新和上拉加载)
SuperSwipeRefreshLayout(非浸入式下拉刷新、上拉加载)_第1张图片
 
2,简单使用方法
1,引入库,一共五个文件
SuperSwipeRefreshLayout(非浸入式下拉刷新、上拉加载)_第2张图片
 2,使用xml + java
xml version="1.0" encoding="utf-8"?>
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/super_swipe_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

            android:id="@+id/recycle_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    

swipeRefreshLayout = (SuperSwipeRefreshLayout) findViewById(R.id.super_swipe_refresh);

// init SuperSwipeRefreshLayout
swipeRefreshLayout.setOnRefreshListener(new SuperSwipeRefreshLayout.OnSwipeListener()
{
   @Override
   public void onAnimating()
   {
      new Handler().postDelayed(new Runnable()
      {

         @Override
         public void run()
         {
            swipeRefreshLayout.setRefreshing(false);
            // 更新recyclerView
            recycleAdapter.add(0, "Refresh Item + " + new Random().nextInt(300));
            recycleView.scrollToPosition(0);
         }
      }, 4000);
   }
});
swipeRefreshLayout.setOnLoadListener(new SuperSwipeRefreshLayout.OnSwipeListener()
{
   @Override
   public void onAnimating()
   {
      new Handler().postDelayed(new Runnable()
      {

         @Override
         public void run()
         {
            swipeRefreshLayout.setLoadMore(false);
            // 更新recyclerView
            int itemNumber = recycleAdapter.getItemCount();
            recycleAdapter.add(itemNumber, "Loaded Item + " + new Random().nextInt(300));
            recycleView.scrollToPosition(itemNumber);
         }
      }, 4000);
   }
});

3,定制View使用方法
1)设置下拉刷新(以下方法都可以不实现)
// swipeRefreshLayout.setRefreshAdapter(null); // 设置为null,则取消了下拉刷新效果
swipeRefreshLayout.setRefreshAdapter(new DefaultSwipeRefreshAdapter(this)
{
   // 动画下拉时,距离变动
   @Override
   protected void onCreate(float dragDistance, float targetDistance)
   {
      super.onCreate(dragDistance, targetDistance);
   }
   
   // 动画下拉时,是否过了临界点
   @Override
   protected void onStart(boolean enable)
   {
      super.onStart(enable);
   }
   
   // 传递你需要定制的view;
   @NonNull
   @Override
   protected View getView(Context context)
   {
      return super.getView(context);
   }
   
   // 正在刷新时,执行的操作
   @Override
   protected void onAnimating()
   {
      super.onAnimating();
      
      new Handler().postDelayed(new Runnable()
      {
         
         @Override
         public void run()
         {
            swipeRefreshLayout.setRefreshing(false);
            // 更新recyclerView
            recycleAdapter.add(0, "Refresh Item + " + new Random().nextInt(300));
            recycleView.scrollToPosition(0);
         }
      }, 4000);
   }
   
   // 设置是否在表面;true:子View随下拉而一起滑动; false:子view不下滑,只是浮在上面
   @Override
   public boolean isTargetScroll()
   {
      return super.isTargetScroll();
   }
   
   // 返回背景颜色
   @Override
   public int getBackgroundResource()
   {
      return super.getBackgroundResource();
   }
});
2)设置上拉加载(与下拉刷新,基本类似)
swipeRefreshLayout.setLoadAdapter(null);
swipeRefreshLayout.setOnLoadListener(new SuperSwipeRefreshLayout.OnSwipeListener()
{
   @Override
   public void onAnimating()
   {
      new Handler().postDelayed(new Runnable()
      {

         @Override
         public void run()
         {
            swipeRefreshLayout.setLoadMore(false);
            // 更新recyclerView
            int itemNumber = recycleAdapter.getItemCount();
            recycleAdapter.add(itemNumber, "Loaded Item + " + new Random().nextInt(300));
            recycleView.scrollToPosition(itemNumber);
         }
      }, 4000);
   }
});

4,参考
第一部分: https://github.com/lsjwzh/MaterialLoadingProgressBar  作用:旋转效果
其实也是仿照Google的SwipeRefreshLayout写的

第二部分: https://github.com/nuptboyzhb/SuperSwipeRefreshLayout  作用:实现下拉刷新和上拉加载效果
这是重点,具体有什么内容,自己看源码

5,工程下载
https://github.com/yline/public_view_superSwipeRefreshLayout

希望用起来,然后同步修改问题(0*0)












你可能感兴趣的:(SuperSwipeRefreshLayout(非浸入式下拉刷新、上拉加载))