频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
AppTransition笔记
2014-08-30 11:02:23         来源:guoqifa29的专栏  
收藏   我要投稿

AppTransition是一个Activity过渡动画控制类,“ State management of app transitions. ”。提供了创建缩小、放大动画接口,加载动画等接口。
1、mConfigShortAnimTime


过渡动画持续时长。这个值只有在创建缩小(createThumbnailAnimationLocked ()、放大(createScaleUpAnimationLocked())动画时才有效。这个值会设置到Animation.mDuration中去,mDuration值还可以被scaleCurrentDuration()函数放大多少倍。

    public void scaleCurrentDuration(float scale) {
        mDuration = (long) (mDuration * scale);
        mStartOffset = (long) (mStartOffset * scale);
    }

2、mDecelerateInterpolator

是一个Interpolator类对象,从名字看是一个减速插值器。Interpolator(插值器)用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等,详情请看此博文。这个插值器在createThumbnailAnimationLocked ()、createScaleUpAnimationLocked()中设置到窗口缩放Animation中去。

 * 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.

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中去。

 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);
        ...........
}
这个函数的逻辑非常简单,首先求出当前播放时长跟总时长比值,然后将这个小于1的比值作为参数传给插值器,进而返回一个按一定变化规律更改过的值,最后将返回的值(插值器返回的时间比值)传给applyTransformation()来求出对应的Transformation。从上述看来,动画效果受三个方面影响:①mDuration;②插值器;③applyTransformation()函数。不过这三个因素对动画的影响效果是截然不同的,mDuration影响的是动画总时长,插值器影响的是动画变化率,applyTransformation()影响的是播动画时窗口大小和透明度。

3、createScaleUpAnimationLocked()

4、createThumbnailAnimationLocked()






点击复制链接 与好友分享!回本站首页
相关TAG标签 笔记
上一篇:二叉树的遍历方法
下一篇:Kinect for Windows SDK v2.0 开发笔记 (十一) 高清面部帧(2) 面部特征对齐
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站