GUI

特效:下拉刷新(drag-to-refresh)

代码上,它对应gui2::effect::trefresh类。

下拉刷新只涉及到一个track控件。

 

两类状态

trefresh在实现时引入了两类状态:app状态,track状态

 

app状态

对应trefresh中的refresh_变量。

基于刷新这行为,trefresh把它分为三个阶段:不刷新(norefresh),刷新中(refreshing)和已刷新(refreshed)。举个例子,手头有个蓝牙设备,app要从设备读数据。为避免误操作,一定要让手指在track控件向下拖动一段距离才开始读操作,在拖这距离的过程合称不刷新。app向蓝牙设备发请求读命令,蓝牙设备向app返回数据,这过程称为刷新。track控件回弹到初始位置称为已刷新。

 

track状态

trefresh中的track_status_变量。

基于track控件,trefresh把它分为三个阶段:常态(track_normal)、拖动(track_drag)和弹回(track_springback)。控件平时处于常态,手指按在track控件后处于拖动,一旦松开,track控件就进入弹回,弹回结束回到常态。

在生命期内,这两个状态在相互交织上没有清晰界线。举个例子,app状态处于刷新中时,track控件可能处于拖动也可能处于弹回。

 不刷新(norefresh)刷新中(refreshing) 刷新结束(refreshed)
对应track状态track_normal,后段时间须是track_drag一开始是track_drag,如果刷新没结束就松开,会进入track_springback如果刷新没结束就松开,一开始是track_drag,松开后进入track_springback
app行为它很大目的是为了避免误操作,app基于不要做1)在这之前调用set_refreshing_anim,以决定刷新中要播放的动画。2)执行刷新操作在这之前调用set_refreshed_text,以决定刷新结束要显示的文字
界面表现不断拉伸image_指示的图像播放anim_type_类型的动画显示refreshed_text_指示的文字

关于界面表现的几点说明

  1. track正处于弹回状态,此时再次执行拖动,不会改变app状态,即当前是refreshed的话那拖动时还是refreshed。

 

app如何使用刷新特效

  1. 定义一个trefresh的类对象,像“trerfersh refresh_”。
  2. refresh_.set_widget(widget)。参数widget是指向track控件的指针。此个控件须要使能定时功能,定时间隔建议用100。
  3. refresh_.set_did_refreshing(boost::bind(&thome::did_refreshing, this))。挂接刷新函数。进入刷新状态后该函数将被调用。
  4. refresh_.set_did_can_drag(boost::bind(&thome::track_can_drag, this))。挂接判断当前是否可以拖动的函数。按下手指,刷新特效会调用这函数,用于判断当前是否能拖动。如果能拖动,该函数返回true,否则false。
  5. refresh_.set_refreshing_anim(anim2::MASCOT)。设置刷新时要播放动画类型。
  6. 在thome::callback_control_drag_detect调用refresh_.callback_control_drag_detect。你也可以直接把trefresh::callback_control_drag_detect作为track控件的处理函数。
  7. 在thome::callback_time调用“set_yoffset = drag_refresh_.draw(set_yoffset)”,要注意返回的set_offset可能不是输入值,它指示了实际“应该”使用的set_offset。
  8. 刷新完成,调用“refresh_.set_refreshed()”,在之前可调用“refresh_.set_refreshed_text(str)”来自定义要示的字符串。

全部评论: 0

    写评论: