请选择 进入手机版 | 继续访问电脑版

QT使用之 手指滑动 | 物理惯性继续滑动动画的实现,根据不同速度实现不同动

[复制链接]
世上人间 发表于 2021-1-1 17:48:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
QT使用之 :手指滑动后物理惯性滑动-动画的实现,根据差别速度有差别的效果
  二、思路

1、思路实在很简朴,就是 touch 事件竣事之后,让滚动条自己再继承滚动一会就可以了;
2、对于惯性减速的实现,在touch事件开始以及竣事的时候,可以获取touch的方向以及速度;
3、动画的实现,使用QTimer隔断一定的时间后,对于当前滑动实现减速 + 滑动的效果
三、实现代码

主要就是定时器的使用~
代码中的startPoint 和 endPoint 依旧是使用QT:触摸屏支持手指触摸,增加touch事件touchevent,纪录前后touch坐标并处置惩罚中的逻辑,所以得看一下
  1. bool WidgetTouch::touchEndEventProcess(QEvent *event){    QTouchEvent *touchEvent = static_cast(event);    int touchDistance =  qAbs (startPoint.x() - endPoint.x());        touchEnd_time =QTime::currentTime();    elapsed = touchBegin_time.msecsTo(touchEnd_time);    speed = touchDistance * 1000 / elapsed; // 盘算当前滑动的速度  单元 s    m_rollTime = 20;    m_rollTimer->setInterval(m_rollTime);        // 增加阈值    if (touchDistance >= 10 && elapsed >200)    {        startRoll();    }    touchEvent->accept();    return true;}// 物理惯性动画效果void WidgetTouch::startRoll(){    m_rollTimer->start();}void WidgetTouch::onTimeout(){    everyDistance = speed * m_rollTime / 1000;        // 此处的 bar 就是自己界说的 需要滚动的 QScrollBar        bar->setValue(bar->value() + everyDistance);     if (speed >= 40) {  // 每一次 40 px        speed -= 40;    } else {        m_rollTimer->stop();    }    update();}
复制代码
来源:https://blog.csdn.net/qq_43473694/article/details/111038823
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

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

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )