本文主要是介绍chrome之view之animate,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
chrome的动画机制
动画首先需要创建一个容器,负责时间调度,这里是AnimationContainer
这个类里面使用的是base::RepeatingTimer来开设置settimer,然后回调
到run()
timer_.Start(min_timer_interval_, this, &AnimationContainer::Run);
run()
{
Elements elements = elements_;
for(Elements::const_iterator i=elements.begin(); i!=elements.end(); ++i)
{
// 确保元素是合法的.
if(elements_.find(*i) != elements_.end())
{
(*i)->Step(current_time);
}
}
run里循环调用所有的元素,并调用他们的step方法,
(*i)->Step(current_time);
这些element就是具体的动画对象了,比如LinearAnimation,multiAnimation之类的
这里会根据消耗的时间占总时间的比例来设置state_,设置了以后再调用
delegate()->AnimationProgressed(this);来执行具体的绘画动作
一个流程就完成了
实例来个
首先一个类,需要继承animate::deletegate才有了可以接受>AnimationProgressed的能力
然后呢,这个类需要设置一个AnimationContainer,new也好,使用现成的也好
有了时间管理的类,还需要创建出具体的动画行为,比如SlideAnimation,这个类需要设置container
然后就可以调用animation的show->start->container.start->timer.settimer了
container.start的时候会将这个animation加到elements里面
然后时间到了,就会ontimer->container.run->element.step->delegate.>AnimationProgressed
还是不习惯c++的这种写法,一点功能需要这么多类,还需要这么多的组合,你套我,我套你,感觉很乱
但是这是google的代码,应该是高水准的了
deletgate包含container,还包含里具体的animation,然后container和animation也是互相拥有,执行过程也是
一大堆栈调用,实际运行发现这个动画也是比较占用资源的
这篇关于chrome之view之animate的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!