在SOUI3.0中使用数值动画
上一篇介绍了插值动画,插值动画是直接作用于窗口对象的。
数值动画则可以作用于任何对象。
SOUI内置了3种数值类型的动画,分别是SIntAnimator, SFloatAnimator, SColorAnimator,分别对应int, float, COLOR这3种数据类型,当然用户也可以扩展支持其它数据类型,不过基本上这3种就足够了。
下面以demo中使用的ColorAnimator为例来介绍如何使用数值动画。
首先,和插值动画一样,我们需要一个XML来描述这个动画。
<?xml version="1.0" encoding="utf-8"?>
<colorAnimator duration="1000" valueFrom="RGBA(0,0,0,128)" valueTo="RGBA(255,0,0,128)" repeatCount="1" repeatMode="reverse"/>
上面是一个colorAnimator, 它描述了一个将颜色值从rgba(0,0,0,128)变化为rgba(255,0,0,128)的动画,一次动画持续1秒,再加一次重复,这个动画一共2秒。
定义好动画后,我们需要在代码中加载这个动画:
void CMainDlg::OnSouiClick()
{
IValueAnimator * pAni = SApplication::getSingletonPtr()->LoadValueAnimator(L"valueAni:colorAni");
if(pAni)
{
pAni->addListener(this);
pAni->addUpdateListener(this);
pAni->start(this);
}
}
上面代码首先从ValueAni:colorAni指定的XML资源里加载并创建一个IVaueAnimator对象,创建成功以后,调用pAni->addUpdateListener(this)来设置动画回调。然后调用pAni->start(this)来启动动画。
注意这里这个pAni对象没有被其它对象持有。所以在这里start完成后,并不能直接release。
第三步,就是响应数值变化:
Demo中CMainDlg实现了IValueAnimator::IAnimatorUpdateListener接口,这个接口只有一个方法:
struct IAnimatorUpdateListener
{
virtual void onAnimationUpdate(IValueAnimator *pAnimator) = ;
};
这个方法在CMainDlg中的实现如下:
void CMainDlg::onAnimationUpdate(IValueAnimator *pAnimator)
{
SWindow *pTst = FindChildByName(L"tree_test");
if(pTst)
{
SColorAnimator *ani = sobj_cast<SColorAnimator>(pAnimator);
if(ani)
{
SStringW strColor;
SColor cr(ani->getValue());
strColor.Format(L"RGBA(%d,%d,%d,%d)",cr.r,cr.g,cr.b,cr.a);
pTst->SetAttribute(L"colorBkgnd",strColor);
}
}
}
我们首先找到tree_test这个控件,在这个动画过程中,我们通过动画获得一个颜色值,再用这个颜色值来改变tree_test的背景颜色。这里实际上相当于实现了一个Android的属性动画。
最后,在动画完成的时候,我们做下面的处理:
void CMainDlg::onAnimationEnd(IValueAnimator * pAnimator)
{
SWindow *pTst = FindChildByName(L"tree_test");
if(pTst)
{
pTst->SetAttribute(L"colorBkgnd",L"RGBA(255,255,255,0)");//set invalid colorBkgnd
pAnimator->Release();
}
}
在这里,我们把tree_test的背景色恢复成不使用背景,再调用pAnimator->Release()来释放数据动画对象。
下面看一下数值动画运行的效果。
这是一个简单的数据动画的demo,虽然例子很简单,实际上用户可以使用它完成各种任务,这里不再一一举例。
启程软件 2019年8月4日
在SOUI3.0中使用数值动画的更多相关文章
- SOUI3.0仿Android插值动画使用方法
在Android系统中,有插值动画,数值动画,属性动画,帧动画. 帧动画,在SOUI里可以通过AnimateImg这个控件来实现,其它几种动画3.0之前不支持,需要类似动画效果,只能自己通过定时器去实 ...
- Unity 4.0 中的新动画系统——MecAnim
分享一个文档资料,关于动画系统的,版本应该很老了,但是有借鉴意义的: Unity 4.0 已于 2012 年 11 月 15 日正式发布,Unity 每一次版本的提升,都给游戏开发者带来惊喜,这一次也 ...
- (六)Unity5.0新特性------新动画功能
unity 5.0 中的新动画功能 这里是你能够期待的新动画功能高速概述 ! State Machine Behaviours状态机行为 在Unity 5 中,你会能够将StateMachine ...
- vue2.0中动画
#vue2.0中css动画不显示的坑: transition中包含的两个标签如果相同(此处都是p标签),需要为元素指定key.如果标签名不同的话,不指定key也可以出现动画效果. #vue2.0中js ...
- CSS3中的animation动画
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Android中的帧动画与补间动画的使用
前言 在日常开发中,我们有时候须要一些好看的动画效果,这时能够充分利用Android提供的这几种动画来实现. Android提供了3种类型的动画: 补间动画:补间动画能够应用于View,让你能够定义一 ...
- css3中的制作动画小总结
系列教程 CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation: Transform 在CSS3中transform主要包括以下几种:旋转rotate. ...
- css3中变形与动画(三)
transform可以实现矩阵变换,transition实现属性的平滑过渡,animation意思是动画,动漫,这个属性才和真正意义的一帧一帧的动画相关.本文就介绍animation属性. anima ...
- Servlet3.0中Servlet的使用
目录 1.注解配置 2.异步调用 3.文件上传 相对于之前的版本,Servlet3.0中的Servlet有以下改进: l 支持注解配置. l 支持异步调用. l 直接有对文件上传的支持. 在这篇 ...
随机推荐
- luogu P1587 [NOI2016]循环之美
传送门 首先要知道什么样的数才是"纯循环数".打表可以发现,这样的数当且仅当分母和\(k\)互质,这是因为,首先考虑除法过程,每次先给当前余数\(*k\),然后对分母做带余除法,那 ...
- Flask开发系列之模板
Flask开发系列之模板 本文对<FlaskWeb开发:基于python的Web应用开发实战>模板一节做的总结. Jinja2模板引擎 模板 模板是一个包含响应文本的文件,其中包含用占位变 ...
- Spring Framework Part4 self-summeries-a simplified MVC framework
1.关于Spring Framework xml的头部 <?xml version="1.0" encoding="UTF-8"?> <bea ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(10)|Vectors容器]
[易学易懂系列|rustlang语言|零基础|快速入门|(10)] 有意思的基础知识 Vectors 我们之前知道array数组是定长,只可我保存相同类型的数据的数据类型. 如果,我们想用不定长的数组 ...
- Mvc Excel导入加事务加导出
导出 public FileResult Input() { DataTable dt = new DataTable("dd"); using (SqlConnection co ...
- JVM metaspace元空间
元空间的本质和永久代类似,都是对JVM规范中方法区的实现. 元空间不在虚拟机中,而是使用本地内存. 用于元空间的JVM参数: -XX:MetaspaceSize=N 初始化Metaspace大小, ...
- 基本运算符与if while详解:
''' 基本运算符与if while详解: ''' # 算术运算符 # + - * / % // ** # 返回一个数值 # 比较运算符 # > >= < <= == != # ...
- python中split()及os.path模块的使用方法
返回path规范化的绝对路径path=os.path.abspath('test.py')print(path)输出 D:\Caps\test.pypath=os.path.abspath('D:\\ ...
- 负载均衡(三)Nginx的安装配置
linux系统为Centos 64位 一.安装 [root@cuiqq local]# mkdir /usr/local/nginx [root@cuiqq local]# cd /usr/local ...
- 美国的电信巨头T-Mobile今天披露了另一起数据遭黑客泄露事件
您是T-Mobile预付费客户吗?如果是,您应该立即创建或更新您关联的帐户PIN /密码,以提供额外的保护.总部位于美国的电信巨头T-Mobile今天披露了另一起数据泄露事件,该事件最近暴露了一些使用 ...