• 智慧北京04_自定义下拉刷新


    1,自定义下拉刷新-添加头布局

    参考ui

    1.1,下拉刷新实际上是一个View,添加到ListView头布局上的控件

      创建对应的布局文件

    1.2,创建一个自定义控件PullToRefreshListView

    创建方法initHeaderView()//初始化头布局控件

    注意:头布局的添加顺序:先添加的在上面

    1.3,隐藏头布局

    设置头布局的padding为自身的(-高度)

    获取高度的时候,记得先手动测量一下

    1.4,拉出头布局

     

    重写触摸事件,记录按下的位置(downX),和移动的位置,两者相减

    但是这里要注意,ViewPager头条新闻可能会消费掉按下的位置,导致按下的位置(downX)没有赋值,所以在移动的事件判断中(要给downX重新赋值)

    下拉的时候,判断如果是一个条目,或移动的值为正数才能拉出头布局

    然后动态的修改padding(移动的值 - 高度);

    1.5 头布局状态切换

    定义一个枚举表示这三个状态

    下拉刷新:

    默认状态,padding 小于0的时候显示,并且当前不处于正在刷新

    松开刷新

    padding大于0,并且上一个状态处于下拉刷新进入

    正在刷新

    松开事件中,如果处于松开刷新时进入.

    定义一个方法,当状态发生改变的时候调用

    观察可知,状态文字,时间,箭头发生了改变

    箭头动画由↓逆时针180度↑,记得保持最后的状态

    当松手之后,如果为刷新状态:修改头布局padding0,完整展示,显示进度条,隐藏箭头(记得把动画清理掉,否则不能隐藏)否则隐藏头布局

    细节:如果处于正在刷新,再次拖拽的时候不应该进入判断,break跳出循环

    1.6 接口回调

    哪里需要通知调用者,就在哪里进行调用接口方法

    要提供一个方法给外界设置回调监听器

    调用者在回调的方法里再次访问网络解析数据

    自定义控件中提供一个方法,让调用者调用

    同时调用自定义控件的方法,告诉自定义控件刷新结束了(网络请求失败的时候也要调用一下)

    1.7 时间更新

    创建一个设置时间的方法,让调用者调用(不在自定义控件中更新,是因为网络请求可能失败,失败的话,是不需要更新时间的,)

    当然,也可以写在刷新的方法里,传递一个参数进来,判断是否成功请求网络

    MM月 如果是小写 就是从0开始的

    HH 小时 24进制,hh 12进制

    初次显示的时间,可以按需求来,是否需要保存在本地(只显示成功请求的时间之类的)

    1.8 Xutils细节补充

    Xutils访问网络不需要创建子线程,因为它底层用的是AsyncTask

    Xutils的回调方法里可以更新ui,因为回调方法实际上是在handler里进行的,已经在主线程中运行了.就不用担心更新ui的问题.底层是异步的

  • 相关阅读:
    Flask 5 模板1
    Flask 4 拓展
    Python学习札记(二十四) 函数式编程5 返回函数
    Python学习札记(二十三) 函数式编程4 sorted
    Docker:Err http://archive.ubuntu.com trusty InRelease & E: Unable to locate package [name] 问题
    解决 docker: Error response from daemon: ... : net/http: TLS handshake timeout.
    Ubuntu 安装Docker
    Flask 3 程序的基本结构2
    Flask 2 程序的基本结构1
    Flask 1 Introductory Chapter
  • 原文地址:https://www.cnblogs.com/adventurer/p/5668132.html
Copyright © 2020-2023  润新知