依赖:
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) { } }
Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
最新推荐文章于 2024-05-11 09:30:13 发布