Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
来源:互联网 发布:美国人聊天软件下载 编辑:程序博客网 时间:2024/06/11 16:58
依赖:
compile 'com.wang.avi:library:2.1.3'布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <!--刚进入页面加载中动画--> <com.wang.avi.AVLoadingIndicatorView android:id="@+id/avi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" app:indicatorColor="?attr/colorPrimary" app:indicatorName="BallSpinFadeLoaderIndicator"/> <!--上拉刷新,只能有一个子控件,所以放入了RelativeLayout--> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swiperedreshlayout" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rlv" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> <!--下拉刷新时显示 默认隐藏--> <LinearLayout android:id="@+id/layout_loadmore" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" android:gravity="center_horizontal" android:orientation="horizontal" android:padding="12dp" android:visibility="gone"> <!--加载数据中动画--> <com.wang.avi.AVLoadingIndicatorView android:id="@+id/avi_loadmore" style="@style/AVLoadingIndicatorView.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" app:indicatorColor="?attr/colorPrimary" app:indicatorName="LineScalePartyIndicator"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="6dp" android:gravity="center" android:text="加载更多" android:textSize="16sp"/> </LinearLayout> </RelativeLayout> </android.support.v4.widget.SwipeRefreshLayout></RelativeLayout>代码:
public class AnFragment extends Fragment implements Iview { private View view; private AndroidPresenter presenter; List<Abeanuser> lists=new ArrayList<Abeanuser>(); private Alist alist; int page=1; private RecyclerView xlv; private AVLoadingIndicatorView avi; private AVLoadingIndicatorView aviLoadmore; private SwipeRefreshLayout swiperedreshlayout; private LinearLayout layout_loadmore; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.layout_android, container, false); Fresco.initialize(getActivity()); xlv =(RecyclerView)view.findViewById(R.id.rlv); avi =(AVLoadingIndicatorView)view.findViewById(R.id.avi); aviLoadmore =(AVLoadingIndicatorView)view.findViewById(R.id.avi_loadmore); swiperedreshlayout =(SwipeRefreshLayout)view.findViewById(R.id.swiperedreshlayout); layout_loadmore =(LinearLayout)view.findViewById(R.id.layout_loadmore); //下拉刷新 swiperedreshlayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { lists.clear(); page = 1; presenter.getData(page); } }); //监听上拉加载更多 xlv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (lists.size() < 1) { return; } //如果正在下拉刷新则放弃监听状态 if (swiperedreshlayout.isRefreshing()) { return; } //当前RecyclerView显示出来的最后一个的item的position,默认为-1 int lastPosition = -1; //当前状态为停止滑动状态SCROLL_STATE_IDLE时 if (newState == RecyclerView.SCROLL_STATE_IDLE) { RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); //分别判断三种类型 if (layoutManager instanceof GridLayoutManager) { //通过LayoutManager找到当前显示的最后的item的position lastPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition(); } else if (layoutManager instanceof LinearLayoutManager) { lastPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition(); } else if (layoutManager instanceof StaggeredGridLayoutManager) { //因为StaggeredGridLayoutManager的特殊性可能导致最后显示的item存在多个,所以这里取到的是一个数组 //得到这个数组后再取到数组中position值最大的那个就是最后显示的position值了 int[] lastPositions = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()]; ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(lastPositions); lastPosition = findMax(lastPositions); } // 判断界面显示的最后item的position是否等于itemCount总数-1也就是最后一个item的position //如果相等则说明已经滑动到最后了 if (lastPosition == recyclerView.getLayoutManager().getItemCount() - 1) { //此时需要请求等过数据,显示加载更多界面 page++; startLoadingMore(); presenter.getData(page); } } } private int findMax(int[] lastPositions) { int max = lastPositions[0]; for (int value : lastPositions) { if (value > max) { max = value; } } return max; } }); //开启加载中动画 startLoading(); Bundle bundle = getArguments(); //接收传递过来的值 String string = bundle.getString("name", "ANDROID"); presenter = new AndroidPresenter(this); presenter.getData(page); alist = new Alist(getActivity(),lists); //让其显示的样式 LinearLayoutManager manager = new LinearLayoutManager(getActivity()); xlv.setLayoutManager(manager); return view; }//加载中动画 private void startLoading() { avi.smoothToShow(); } /** * 开启加载更多动画 */ public void startLoadingMore() { layout_loadmore.setVisibility(View.VISIBLE); aviLoadmore.smoothToShow(); } /** * 关闭加载中动画 */ public void stopLoading() { if (avi.isShown()) { avi.smoothToHide(); } } /** * 关闭加载更多动画 */ public void stopLoadingMore() { layout_loadmore.setVisibility(View.GONE); aviLoadmore.smoothToHide(); } /** * 停止下拉刷新 */ public void stopRefreshing() { if (swiperedreshlayout.isRefreshing()) { swiperedreshlayout.setRefreshing(false); } } @Override public void onSuccess(Object o) { bean oo=(bean)o; List<bean.ResultsBean> results = oo.getResults(); for (int i=0;i<results.size();i++){ String time = results.get(i).getCreatedAt(); String titles = results.get(i).getDesc(); String img = results.get(i).getUrl(); String name = results.get(i).getWho(); lists.add(new Abeanuser(img,titles,name,time)); } xlv.setAdapter(alist); alist.notifyDataSetChanged(); //关闭动画 stopLoading(); stopLoadingMore(); stopRefreshing(); } @Override public void onFailed(Exception e) { }}
阅读全文
0 0
- Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
- Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
- 自定义下拉刷新上拉加载动画
- AVLoadingIndicatorView---加载动画
- AVLoadingIndicatorView加载效果动画
- 上推动画下拉刷新上拉加载
- Android的加载动画AVLoadingIndicatorView
- 自定义(下拉刷新、上拉加载)帧动画
- 实现下拉刷新,上拉加载可自定义各种动画
- 上拉加载 下拉刷新
- 下拉刷新 * 上拉加载
- 上拉刷新 下拉加载
- 下拉刷新,上拉加载
- 上拉刷新下拉加载
- 下拉刷新,上拉加载
- 上拉刷新,下拉加载
- 上拉刷新下拉加载
- 上拉刷新下拉加载
- [SpringMVC 源码] SpringMVC 中 HTTP 请求与响应原理
- Spring Security 入门教程 -01- Hello World
- 渐行渐远
- UE4中制作高大上的相机动画
- JAVA设计模式之单例模式
- Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
- 翻译:macOS10.12.2 local_privilage_Escalation
- 死磕红皮书(在HTML中使用Javascript)
- CSS隐藏元素的几种方法
- pb 窗体最大化最小化触发事件
- Java基础-正则表达式
- 数据迁移(sql server 迁移到 oracle)
- DOM脚本编程最佳实践
- 我的学习记录70