到这下拉刷新就结束了 。
上拉加载更多也是如此
2、上拉加载更多2.1、底部样式<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:gravity="center"tools:ignore="MissingDefaultResource"><ProgressBarandroid:id="@+id/footer_prggress"android:layout_width="20dp"android:layout_height="match_parent"style="?android:attr/progressBarStyle"android:layout_marginEnd="10dp"android:indeterminateTint="#E8AD56"/><TextViewandroid:id="@+id/footer_text"android:layout_width="wrap_content"android:layout_height="70dp"android:text="正在加载更多"android:gravity="center"android:textColor="#E8AD56"/></LinearLayout>

文章插图
2.2、布局添加
public void init(Context context) {viewFooter = View.inflate(context, R.layout.view_footer, null);viewFooter.measure(0, 0);footer_text = viewFooter.findViewById(R.id.footer_text);footer_prggress = viewFooter.findViewById(R.id.footer_prggress);heightFooter = viewFooter.getMeasuredHeight();viewFooter.setPadding(0, -heightFooter, 0, 0);this.addFooterView(viewFooter);}
到这里也布局算是添加完毕了,加载更多实现方式不同,我罗列两种- 结合OnTouchListener
- 结合OnScrollListener
private final int MORE_LOAD_STATE = 10;private final int MORE_LOADING = 11;private final int MORE_NO = 12;//已加载全部数据private int more_current_state = MORE_LOAD_STATE;//当前状态
只有一点需要注意paddFooterY = paddFooterY > heightFooter ? 0 : paddFooterY;来判断不能滑出底部的高度 。@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:downY = (int) event.getY();break;case MotionEvent.ACTION_MOVE:moveY = (int) event.getY();diffY = moveY - downY;//滑动的距离paddFooterY = heightFooter - diffY/3 ;//上拉加载更多if (getLastVisiblePosition() == getCount() - 1 && more_current_state != MORE_NO) {if( more_current_state!=MORE_LOADING){more_current_state = MORE_LOADING;if (iPullDownRefreshService != null) {iPullDownRefreshService.onLoadMore();}}paddFooterY = paddFooterY > heightFooter ? 0 : paddFooterY;viewFooter.setPadding(0,paddFooterY , 0, 0);return true;}break;case MotionEvent.ACTION_UP:break;}return false;}
方式二public class MyListview extends ListView implements View.OnTouchListener, AbsListView.OnScrollListener{@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {//没有滚动,或者已经用户触摸滚动动画结束if(scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_FLING){//最后一个可见if(getLastVisiblePosition() == getCount()-1){viewFooter.setPadding(0,0,0,0);if(iPullDownRefreshService!=null){iPullDownRefreshService.onLoadMore();}}}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}}
注意:在init方法中添加public void init(Context context) {setOnTouchListener(this);......this.setOnScrollListener(this);}
完工经验总结扩展阅读
- 自定义View6 -塔防小游戏:第三篇防御塔随意放置+多组野怪
- 自定义映射resultMap
- OpenDataV低代码平台增加自定义属性编辑
- 如何免费自定义qq主题
- vue3 自定义指令控制按钮权限
- 魅族mx5怎么设定自定义铃声
- 苹果手机怎么选择截屏(苹果手机怎么把截屏放在下拉菜单)
- iPhone苹果手机如何自定义设置墙纸?
- 吃鸡怎么自定义比赛?
- 王者荣耀自定义按键布局怎么设置?