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) {    }}