Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
来源:互联网 发布:五色旗 知乎 编辑:程序博客网 时间:2024/05/21 22:23
一:介绍SwipeRefreshLayout上拉刷新与AVLoadingIndicatorView动画的联动,使页面效果更美观
上拉v4自带 动画需要添加依赖
compile 'com.wang.avi:library:2.1.3'
二:布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent"> <!--刚进入页面加载中动画--> <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/recyclerview" 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>
package com.lgank.fragment;import android.content.Intent;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import com.lgank.R;import com.lgank.adapter.HomeASReAdapter;import com.lgank.bean.AndroidBean;import com.lgank.presenter.HomeAsPresenter;import com.lgank.view.DetailsActivity;import com.wang.avi.AVLoadingIndicatorView;import java.util.ArrayList;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;import butterknife.Unbinder;/** * Created by 绅V科技 on 2017/12/17 0017. */public class HomeFragmentA extends Fragment implements IView { @BindView(R.id.recyclerview) RecyclerView recyclerview; Unbinder unbinder; @BindView(R.id.swiperedreshlayout) SwipeRefreshLayout swiperedreshlayout; @BindView(R.id.avi_loadmore) AVLoadingIndicatorView aviLoadmore; @BindView(R.id.layout_loadmore) LinearLayout layoutLoadmore; @BindView(R.id.avi) AVLoadingIndicatorView avi; private View view; private HomeAsPresenter homeAsPresenter; List<AndroidBean.ResultsBean> relist = new ArrayList<>(); private HomeASReAdapter homeAReAdapter; private int page = 1; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.home_a, container, false); unbinder = ButterKnife.bind(this, view); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //开启加载中动画 startLoading(); //布局管理器 LinearLayoutManager manager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); //适配器 homeAReAdapter = new HomeASReAdapter(getActivity(), relist); //recyclerview设置 recyclerview.setLayoutManager(manager); recyclerview.setAdapter(homeAReAdapter); //创建p层 homeAsPresenter = new HomeAsPresenter(this); //请求数据 homeAsPresenter.get("http://gank.io/api/data/", "Android", 10, page); //点击跳转 homeAReAdapter.setOnClick(new HomeASReAdapter.ItemClick() { @Override public void onClick(View view,String url) { Intent intent = new Intent(getActivity(),DetailsActivity.class); intent.putExtra("url",url); startActivity(intent); getActivity().overridePendingTransition(R.anim.in, R.anim.out); } }); //下拉刷新 swiperedreshlayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { relist.clear(); page = 1; homeAsPresenter.get("http://gank.io/api/data/", "Android", 10, page); } }); //监听上拉加载更多 recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (relist.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(); homeAsPresenter.get("http://gank.io/api/data/", "Android", 10, page); } } } }); } public int findMax(int[] lastPositions) { int max = lastPositions[0]; for (int value : lastPositions) { if (value > max) { max = value; } } return max; } /** * 开启加载中动画 */ public void startLoading() { avi.smoothToShow(); } /** * 开启加载更多动画 */ public void startLoadingMore() { layoutLoadmore.setVisibility(View.VISIBLE); aviLoadmore.smoothToShow(); } /** * 关闭加载中动画 */ public void stopLoading() { if (avi.isShown()) { avi.smoothToHide(); } } /** * 关闭加载更多动画 */ public void stopLoadingMore() { layoutLoadmore.setVisibility(View.GONE); aviLoadmore.smoothToHide(); } /** * 停止下拉刷新 */ public void stopRefreshing() { if (swiperedreshlayout.isRefreshing()) { swiperedreshlayout.setRefreshing(false); } } @Override public void onSuccess(Object o) { if (o != null) { AndroidBean b = (AndroidBean) o; List<AndroidBean.ResultsBean> results = b.getResults(); relist.addAll(results); homeAReAdapter.notifyDataSetChanged(); //关闭动画 stopLoading(); stopLoadingMore(); stopRefreshing(); } } @Override public void onFailed(Exception e) { } @Override public void onDestroy() { super.onDestroy(); if (homeAsPresenter != null) { homeAsPresenter.detatch(); } } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); }}
阅读全文
1 0
- Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
- Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
- 自定义下拉刷新上拉加载动画
- AVLoadingIndicatorView---加载动画
- AVLoadingIndicatorView加载效果动画
- 上推动画下拉刷新上拉加载
- Android的加载动画AVLoadingIndicatorView
- 自定义(下拉刷新、上拉加载)帧动画
- 实现下拉刷新,上拉加载可自定义各种动画
- 上拉加载 下拉刷新
- 下拉刷新 * 上拉加载
- 上拉刷新 下拉加载
- 下拉刷新,上拉加载
- 上拉刷新下拉加载
- 下拉刷新,上拉加载
- 上拉刷新,下拉加载
- 上拉刷新下拉加载
- 上拉刷新下拉加载
- 52. N-Queens II
- Android主题换肤 无缝切换
- 洛谷T13776 等值首尾和(add)
- 单源最短路径问题(Bellman-Ford算法)
- 网页中链接中图片的下载
- Androi_SwipeRefreshLayout上拉刷新、AVLoadingIndicatorView加载动画
- 在Android中使用Realm作本地存储
- ORACLE--导入导出/数据泵(imp/exp impdp/expdp)
- PCA原理分析
- ecliespe 中启动tocmat报错解决方案
- java web项目中的maven依赖包在部署时没有加进去
- MyEclipse ci8破解教程,图文教你一步一步走向成功
- ArrayList和LinkedList的区别
- Dynamics 365 Online 如何升级(在有可用更新的情况下)