您的位置:首页 > 其它

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

2017-03-21 10:01 190 查看
总概:

0,介绍场景

1,介绍简单使用效果

2,介绍简单使用方法

3,介绍定制View使用方法

4,参考

5,附上github地址

0,场景

   个人在网上找下拉刷新的,一看一大片的使用adapter实现下拉刷新的效果。

   然后想起之前使用RecyclerView添加头部和底部,是使用修改Adapter实现的。然后在使用addItemDecoration的时候,分割线出现bug --- 添加的头部和底部也出现分割线了

    因此,在实现上拉加载的时候,看到adapter实现的时候,真的听到心碎的声音了;幸好看到网上大神实现了定制ViewGroup,然后个人以此为基础,实现类似Google加载效果、添加适配器模式完成数据适配,完成以下动画效果

   因此,实现了非浸入式的上拉刷新以及下拉加载

1,简单使用效果(下拉刷新和上拉加载)



 

2,简单使用方法
1,引入库,一共五个文件



 2,使用xml + java

<?xml version="1.0" encoding="utf-8"?>
<com.lib.superswipe.SuperSwipeRefreshLayout
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.support.v7.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</com.lib.superswipe.SuperSwipeRefreshLayout>


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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐