常用的刷新技术(二)——Ultra-Pull-To-Refresh
来源:互联网 发布:网易企业邮箱域名设置 编辑:程序博客网 时间:2024/05/23 19:31
Ultra-Pull-To-Refresh
效果图
文字有闪动的效果
消失的时候文字有坍塌的效果
使用步骤
1.导包
compile ‘in.srain.cube:ultra-ptr:1.0.11’
2.布局文件
<in.srain.cube.views.ptr.PtrFrameLayout android:id="@+id/ptrFrameLayout_main" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView_main" android:layout_width="match_parent" android:layout_height="match_parent"/> </in.srain.cube.views.ptr.PtrFrameLayout>
布局文件中用PtrFrameLayout包裹RecyclerView或者ListView
3.编写Java代码
MainActivity
public class MainActivity extends AppCompatActivity { private Context mContext = this;//上下文 private PtrFrameLayout ptrFrameLayout_main; private RecyclerView recyclerView_main; private LinearLayoutManager linearLayoutManager;//RecyclerView的布局管理器 private RecyclerViewAdapter adapter = null;//适配器 private List<String> totalList = new ArrayList<>();//RecyclerView的数据源 private int length = 30; private int lastVisibleItemPosition = 0;//最后一个可见条目的下标(position) Handler handler=new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //调用初始化控件的方法 initView(); } private void initView() { //绑定PtrFrameLayout ptrFrameLayout_main = (PtrFrameLayout) findViewById(R.id.ptrFrameLayout_main); //绑定RecyclerView recyclerView_main = (RecyclerView) findViewById(R.id.recyclerView_main); //给RecyclerView设置布局管理器 linearLayoutManager = new LinearLayoutManager( mContext, LinearLayoutManager.VERTICAL, false); recyclerView_main.setLayoutManager(linearLayoutManager); //调用加载数据的方法,给RecyclerView获取数据源 loadData(); //给RecyclerView设置适配器 adapter = new RecyclerViewAdapter(mContext, totalList); recyclerView_main.setAdapter(adapter); //使用PtrFrameLayout实现下拉刷新 //效果1:设置默认的经典的头视图 PtrClassicDefaultHeader defaultHeader = new PtrClassicDefaultHeader(mContext); //效果2:特殊效果,目前只支持英文字符(闪动的文字Header:闪动文字效果的header) StoreHouseHeader storeHouseHeader = new StoreHouseHeader(this); //storeHouseHeader.setPadding(0, 30, 0, 0); //设置背景颜色为黑色 storeHouseHeader.setBackgroundColor(Color.BLACK); //设置文字的颜色为白色 storeHouseHeader.setTextColor(Color.WHITE); // 文字只能是0-9,a-z不支持中文 storeHouseHeader.initWithString("loading..."); //设置头视图 ptrFrameLayout_main.setHeaderView(storeHouseHeader); // 绑定UI与刷新状态的监听 ptrFrameLayout_main.addPtrUIHandler(storeHouseHeader); // 添加刷新动作监听 ptrFrameLayout_main.setPtrHandler(new PtrDefaultHandler() { @Override public void onRefreshBegin(PtrFrameLayout frame) { //开启一个子线程,模拟网络访问 new Thread(new Runnable() { @Override public void run() { try { //让子线程睡两秒才让刷新图标消失 Thread.sleep(2000); // 刷新完成,让刷新Loading消失 ptrFrameLayout_main.refreshComplete(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }); //因为UltraPullToRefresh只能实现下拉刷新,所以上拉加载只有通过上拉加载RecyclerView来实现 recyclerView_main.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); //通过线性布局管理器找到最后一个可见的item条目的下标(position) lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition(); } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); //如果最后一个可见条目的下标(position)等于RecyclerView的长度&&当前的状态为停止滑动 if (lastVisibleItemPosition + 1 == adapter.getItemCount() && newState == RecyclerView.SCROLL_STATE_IDLE) { Toast.makeText(mContext, "正在加载...", Toast.LENGTH_SHORT).show(); //长度加30 length += 30; //重写加载数据 loadData(); //刷新 adapter.reloadRecyclerView(totalList, false); } } }); } /** * 加载数据 */ private void loadData() { for (int i = 0; i < length; i++) { totalList.add("titles" + i); } // 刷新完成,让刷新Loading消失 ptrFrameLayout_main.refreshComplete(); }}
适配器
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context = null;//上下文 private List<String> list = new ArrayList<>();//数据源 private LayoutInflater inflater = null;//布局填充器 public RecyclerViewAdapter(Context context, List<String> list) { this.context = context; this.list = list; inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.item_recyclerview_main, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ViewHolder) { ViewHolder viewHolder = (ViewHolder) holder; viewHolder.textView_main_details.setText(list.get(position)); } } @Override public int getItemCount() { return list == null ? 0 : list.size(); } class ViewHolder extends RecyclerView.ViewHolder { private TextView textView_main_details; public ViewHolder(View convertView) { super(convertView); textView_main_details = ((TextView) convertView.findViewById(R.id.textView_main_details)); } } /** * 刷新RecyclerView * @param _list * @param isClear */ public void reloadRecyclerView(List<String> _list, boolean isClear) { if (isClear) { list.clear(); } list.addAll(_list); notifyDataSetChanged(); }}
1 0
- 常用的刷新技术(二)——Ultra-Pull-To-Refresh
- 打造自己的下拉刷新库(Ultra-Pull-To-Refresh)(二)
- 下拉刷新库android-Ultra-Pull-To-Refresh的使用
- Ultra Pull To Refresh使用(自定义下拉刷新的头部)
- 下拉刷新框架Android-Ultra-Pull-To-Refresh的使用
- 万能刷新库(android-Ultra-Pull-To-Refresh )
- android-Ultra-Pull-to-Refresh下拉刷新
- android-Ultra-Pull-To-Refresh刷新
- 打造自己的下拉刷新库(Ultra-Pull-To-Refresh)(一)
- Ultra-Pull-To-Refresh的一些问题
- 【用户界面:android-Ultra-Pull-To-Refresh】之二:android-Ultra-Pull-To-Refresh框架分析
- android下拉刷新android-Ultra-Pull-To-Refresh使用
- 下拉刷新框架android-Ultra-Pull-To-Refresh示例
- Ultra Pull To Refresh 下拉刷新 替代PullToRefresh
- Ultra-Pull-To-Refresh实现下拉刷新上拉加载
- android-Ultra-Pull-To-Refresh实现下拉刷新WebView
- Ultra-Pull-To-Refresh 自定义下拉刷新视差动画
- 使用 android-Ultra-Pull-To-Refresh 实现 WebView 下拉刷新
- 如何在 Linux 系统中添加桌面图标
- 单例设计模式中懒汉式并发访问的安全问题
- HDU 2063 过山车(二分图)
- mysql备份、还原和迁移
- android 音频采集1
- 常用的刷新技术(二)——Ultra-Pull-To-Refresh
- halcon+大恒水星相机图像采集
- uva-1484(hdu-3660) Alice and Bob's Trip 听说是树形dp
- sort,qsort,bsearchs函数的用法
- leetcode 61.Rotate List
- win上面配置本地MySQL主从
- webbrowser 里的js调用C#窗体的函数
- POJ 2135 Farm Tour (最小费用最大流模版)
- 史上最详细的Log4j配置