day58_实战项目智慧北京第04天

01_listview刷新头和尾的布局

day58_实战项目智慧北京第04天

 

listview构造函数

day58_实战项目智慧北京第04天

 

day58_实战项目智慧北京第04天day58_实战项目智慧北京第04天day58_实战项目智慧北京第04天

02_listview头和尾的加载

 

三个构造函数,将初始化信息写在参数最多的一个(最后被调用的),要去掉除最里面以外的super

day58_实战项目智慧北京第04天

 

加载头部和尾部的数据

day58_实战项目智慧北京第04天

 

refresh的addLunboView()

day58_实战项目智慧北京第04天

 

 

 

TPI.java里面的调用

day58_实战项目智慧北京第04天

 

03_隐藏listview的头和尾

 

设置头和尾的padding高度为负数

day58_实战项目智慧北京第04天

 

day58_实战项目智慧北京第04天

 

04_listview onTouch事件三种状态的处理

 

/     *

     * (non-Javadoc)

     *

     * @see android.widget.AbsListView#onTouchEvent(android.view.MotionEvent)

     * 覆盖此完成自己的事件处理

     */

    @Override

    publicboolean onTouchEvent(MotionEvent ev) {

        // 需要我们的功能屏蔽掉父类的touch事件

        // 下拉拖动(当listview显示第一个条数据)

 

        switch (ev.getAction()) {

        case MotionEvent.ACTION_DOWN:// 按下

            downY = ev.getY();// 按下时y轴坐标

            break;

        case MotionEvent.ACTION_MOVE:// 移动

 

            if (!isLunboFullShow()) {

                // 轮播图没有完全显示

                break;

            }

 

            if (downY == -1) { // 按下的时候没有获取坐标

                downY = ev.getY();

            }

 

            // 获取移动位置的坐标

            float moveY = ev.getY();

 

            // 移动的位置间距

            float dy = moveY - downY;

            // System.out.println("dy:" + dy);

            // 下拉拖动(当listview显示第一个条数据)处理自己的事件,不让listview原生的拖动事件生效

            if (dy > 0 && getFirstVisiblePosition() == 0) {

 

                // 当前padding top 的参数值

                float scrollYDis = -ll_refresh_head_root_Height + dy;

 

                if (scrollYDis < 0 && currentState != PULL_DOWN) {

                    // 刷新头没有完全显示

                    // 下拉刷新的状态

                    currentState = PULL_DOWN;// 目的只执行一次

                    refreshState();

                } elseif (scrollYDis >= 0 && currentState != RELEASE_STATE) {

                    currentState = RELEASE_STATE;// 记录松开刷新,只进了一次

                    refreshState();

                }

                ll_refresh_head_root.setPadding(0, (int) scrollYDis, 0, 0);

                returntrue;

            }

 

            break;

        case MotionEvent.ACTION_UP:// 松开

            downY = -1;

            //判断状态

            //如果是PULL_DOWN状态,松开恢复原状

            if (currentState == PULL_DOWN) {

                ll_refresh_head_root.setPadding(0, -ll_refresh_head_root_Height, 0,

                        0);

            } elseif (currentState == RELEASE_STATE) {

                //刷新数据

                ll_refresh_head_root.setPadding(0, 0, 0,

                        0);

                currentState = REFRESHING;//改变状态为正在刷新数据的状态

                refreshState();//刷新界面

                //真的刷新数据

                if (listener != null) {

                    listener.refresdData();

                }

            }

            break;

        default:

            break;

        }

        returnsuper.onTouchEvent(ev);

    }

 

05_刷新状态的切换动画

 

刷新界面方法

day58_实战项目智慧北京第04天

 

设置动画

day58_实战项目智慧北京第04天

06_松开状态的处理

day58_实战项目智慧北京第04天

 

day58_实战项目智慧北京第04天

 

07_刷新数据处理和listview界面状态的刷新

 

定义一个接口,用于TPI调用refreshLV中方法

day58_实战项目智慧北京第04天

TPI中实现接口方法

day58_实战项目智慧北京第04天

 

day58_实战项目智慧北京第04天

LV中

day58_实战项目智慧北京第04天

 

08_加载更多数据

 

刷新完成后,还原当前状态位pull_down

day58_实战项目智慧北京第04天

 

listview滚动监听

day58_实战项目智慧北京第04天

 

day58_实战项目智慧北京第04天

 

新增加"加载更多接口"

day58_实战项目智慧北京第04天

 

day58_实战项目智慧北京第04天

 

day58_实战项目智慧北京第04天

 

day58_实战项目智慧北京第04天

 

 

 

 

09_加载更多数据bug修复

day58_实战项目智慧北京第04天

上面

 

10_三种基本排序算法(暂时不学习)