SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3761|回复: 0
打印 上一主题 下一主题

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

[复制链接]

187

主题

346

帖子

2450

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2450
跳转到指定楼层
楼主
发表于 2016-8-25 15:54:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2016-8-25 16:26 编辑

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2024-5-20 04:46 , Processed in 0.051134 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表