AppTransition笔记
<p></p><pre name="code" class="java"><span style="font-size:18px;"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">AppTransition是一个Activity过渡动</span>画控制类,“ State management of app transitions. ”。提供了创建缩小、放大动画接口,加载动画等接口。</span>
<span style="font-size:18px;">1、mConfigShortAnimTime</span>
过渡动画持续时长。这个值只有在创建缩小(createThumbnailAnimationLocked ()、放大(createScaleUpAnimationLocked())动画时才有效。这个值会设置到Animation.mDuration中去,mDuration值还可以被scaleCurrentDuration()函数放大多少倍。
<span style="font-size:18px;"> public void scaleCurrentDuration(float scale) { mDuration = (long) (mDuration * scale); mStartOffset = (long) (mStartOffset * scale); }</span>
2、mDecelerateInterpolator
是一个Interpolator类对象,从名字看是一个减速插值器。Interpolator(插值器)用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等,详情请看此博文。这个插值器在createThumbnailAnimationLocked ()、createScaleUpAnimationLocked()中设置到窗口缩放Animation中去。
<span style="font-size:18px;"> * An interpolator defines the rate of change of an animation. This allows * the basic animation effects (alpha, scale, translate, rotate) to be * accelerated, decelerated, repeated, etc.</span>
3、mThumbnailFadeoutInterpolator
是一个淡出插值器,不过这个插值器会设置到透明度Animation中去。
mThumbnailFadeoutInterpolator = new Interpolator() { @Override public float getInterpolation(float input) { // Linear response for first fraction, then complete after that. if (input < RECENTS_THUMBNAIL_FADEOUT_FRACTION) { return input / RECENTS_THUMBNAIL_FADEOUT_FRACTION; } return 1.0f; } };由代码可以看出,在动画播放到0.25时间占比之前,会
4、mDuration、Interpolator(插值器)是如何影响动画效果的呢?
这个需要研究Animation.getTransformation(),在前面的博客中说了getTransformation()是Animation中最重要的函数,这个函数会返回一个Transformation,里面包含一个3*3矩阵、alpha通道值,这些值会直接设置到SurfaceFlinger中去。<span style="font-size:18px;"> public boolean getTransformation(long currentTime, Transformation outTransformation) { .......... if (duration != 0) { normalizedTime = ((float) (currentTime - (mStartTime + startOffset))) / (float) duration; } ........... final float interpolatedTime = mInterpolator.getInterpolation(normalizedTime); applyTransformation(interpolatedTime, outTransformation); ........... }</span>这个函数的逻辑非常简单,首先求出当前播放时长跟总时长比值,然后将这个小于1的比值作为参数传给插值器,进而返回一个按一定变化规律更改过的值,最后将返回的值(插值器返回的时间比值)传给applyTransformation()来求出对应的Transformation。从上述看来,动画效果受三个方面影响:①mDuration;②插值器;③applyTransformation()函数。不过这三个因素对动画的影响效果是截然不同的,mDuration影响的是动画总时长,插值器影响的是动画变化率,applyTransformation()影响的是播动画时窗口大小和透明度。
3、createScaleUpAnimationLocked()
4、createThumbnailAnimationLocked()
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。