zoukankan      html  css  js  c++  java
  • 动画结束Animation 之 Interpolator 插补器理解

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

        一、描述:

        我们在计设动画时,常通都市用到一些Interpolator,而它的作用就是控制动画的速度,即可以理解为:

        Interpolator是一个速度控制器,控制速度变更。

        Interpolator口借只有一个抽象方法getInterpolation(float input),而统系也自带了几个Interpolater供我们应用:

        1. AccelerateInterpolator:  动画从开始到结束,变更率是一个速加的进程。
    2. DecelerateInterpolator: 动画从开始到结束,变更率是一个减速的进程。
    3. CycleInterpolator:           动画从开始到结束,变更率是循环给定数次的正弦曲线。
    4. AccelerateDecelerateInterpolator: 动画从开始到结束,变更率是先速加后减速的进程。
    5. LinearInterpolator: 动画从开始到结束,变更率是线性变更。

        除了以上几种,我们也可以承继Interpolater来义定自己的插补器:

    import android.view.animation.Interpolator;
    
    public class MyInterpolator implements Interpolator {
    	private float mFactor;
    	private int iFactor;
    
    	public MyInterpolator(int factor) {
    		this.iFactor = factor;
    	}
    
    	@Override
    	public float getInterpolation(float input) {
    		switch (iFactor) {
    		case 1:
    			mFactor = input;  // 性线匀速
    			break;
    		case 2:
    			mFactor = input * input * input;  // 速加
    			break;
    		}
    		return mFactor;
    	}
    }

        二、Interpolater — 略策模式:

        2.1 接口类:TimeInterpolator

    package android.animation;
    
    /**
     * A time interpolator defines the rate of change of an animation. This allows animations
     * to have non-linear motion, such as acceleration and deceleration.
     */
    public interface TimeInterpolator {
    
        /**
         * Maps a value representing the elapsed fraction of an animation to a value that represents
         * the interpolated fraction. This interpolated value is then multiplied by the change in
         * value of an animation to derive the animated value at the current elapsed animation time.
         *
         * @param input A value between 0 and 1.0 indicating our current point
         *        in the animation where 0 represents the start and 1.0 represents
         *        the end
         * @return The interpolation value. This value can be more than 1.0 for
         *         interpolators which overshoot their targets, or less than 0 for
         *         interpolators that undershoot their targets.
         */
        float getInterpolation(float input);
    }
        每日一道理
    共和国迎来了她五十诞辰。五十年像一条长河,有急流也有缓流;五十年像一幅长卷,有冷色也有暖色;五十年像一首乐曲,有低音也有高音;五十年像一部史诗,有痛苦也有欢乐。长河永远奔流,画卷刚刚展开,乐曲渐趋高潮,史诗还在续写。我们的共和国正迈着坚定的步伐,跨入新时代。

        讲的很清晰:TimeInterpolator义定了一个可以转变动画速率的间时插补器,它许允你的动画可以非是线性行为:如速加和减速。

        2.2 Interpolator:

    package android.view.animation;
    
    import android.animation.TimeInterpolator;
    
    /**
     * 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.
     */
    public interface Interpolator extends TimeInterpolator {
        // A new interface, TimeInterpolator, was introduced for the new android.animation
        // package. This older Interpolator interface extends TimeInterpolator so that users of
        // the new Animator-based animations can use either the old Interpolator implementations or
        // new classes that implement TimeInterpolator directly.
    }

        我擦!想必大家都无语,只是告知我们Interpolater扩展了TimeInterpolator,其它什么都没。

        2.3 插补器

        头开经已分析了几种统系自带的,也举了个自义定的类,这些都没有任何关系,只不过提供给开发者,我有几种略策给你用,而你只要要在Animation中,set一下就行,其它的就交给Animation帮你去实现你想要的动画果效。

        三、结总:

        getInterpolation(float input)中的input是从哪里来的?

        它是由Animation类在getTransformation中会调用getInterpolater,input = (当前间时-开始间时)/总时长;

        即在TimeInterpolator中义定input = [0.0f, 1.0f]区间。

        关于Animation,我会空抽讲授它。

    文章结束给大家分享下程序员的一些笑话语录: IT业众生相
    第一级:神人,天资过人而又是技术狂热者同时还拥有过人的商业头脑,高瞻远瞩,技术过人,大器也。如丁磊,求伯君。
    第二级:高人,有天赋,技术过人但没有过人的商业头脑,通常此类人不是顶尖黑客就是技术总监之流。
    第三级:牛人,技术精湛,熟悉行业知识,敢于创新,有自己的公司和软件产品。
    第四级:工头,技术精湛,有领导团队的能力,此类人大公司项目经理居多。
    第五级:技术工人,技术精湛,熟悉行业知识但领导能力欠加,此类人大多为系分人员或资深程序员,基本上桀骜不逊,自视清高,不愿于一般技术人员为伍,在论坛上基本以高手面目出现。
    第六级:熟练工人,技术有广度无深度,喜欢钻研但浅尝辄止。此类人大多为老程序员,其中一部分喜欢利用工具去查找网上有漏洞的服务器,干点坏事以获取成绩感。如果心情好,在论坛上他们会回答菜鸟的大部分问题。此级别为软件业苦力的重要组成部分。
    第七级:工人,某些技术较熟练但缺乏深度和广度,此类人大多为程序员级别,经常在论坛上提问偶尔也回答菜鸟的问题。为软件产业苦力的主要组成部分。
    第八级:菜鸟,入门时间不长,在论坛上会反复提问很初级的问题,有一种唐僧的精神。虽然招人烦但基本很可爱。只要认真钻研,一两年后就能升级到上一层。
    第九级:大忽悠,利用中国教育的弊病,顶着一顶高学历的帽子,在小公司里混个软件部经理,设计不行,代码不行,只会胡乱支配下属,拍领导马屁,在领导面前胡吹海侃,把自己打扮成技术高手的模样。把勾心斗角的办公室文化引入技术部门,实在龌龊!
    第十级:驴或傻X,会写SELECT语句就说自己精通ORALCE,连寄存器有几种都不知道就说自己懂汇编,建议全部送到日本当IT产业工人,挣了日本人的钱还严重打击日本的软件业!

  • 相关阅读:
    POJ 3254 Corn Fields
    【Android】手机号码获取问题
    iOS自动自动隐藏软键盘
    cocos2d-x教程1 hello world
    ORA-02396: exceeded maximum idle time, please connect again的原因
    [置顶] WebService调用工具(AXIS2)
    经典union的使用
    Android Developers:按需求加载视图
    android手机关于google play商店闪退的解决办法
    [置顶] 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3047871.html
Copyright © 2011-2022 走看看