• 动画初步使用以及自定义插值器


    动态初始化Animation,并让动画一个组件运动到另外一个组件的代码

        
        final ImageView to=..
        final ImageView from=..
        
        
        int [] location = new int [2];
        from.getLocationInWindow(location);
        int [] locationTo = new int [2];
        to.getLocationInWindow(locationTo);
        AnimationSet set = new AnimationSet(true);
        animation = null;
        
        float scaleX = to.getDrawable().getIntrinsicWidth()/(float)from.getDrawable().getIntrinsicWidth();
        float scaleY = to.getDrawable().getIntrinsicHeight()/(float)from.getDrawable().getIntrinsicHeight();
        // 动画的所有from属性,都是相对与做动画的组件的做参考的
        //比如,scale动画,from 1代表相对当前组件缩放比例不变     translate动画,from 0 代表,相对当前组件位置,没位移
        animation = new ScaleAnimation(1, scaleX, 1, scaleY);
        set.addAnimation(animation);
        
        animation = new TranslateAnimation(0, locationTo[0]-location[0], 0, locationTo[1]-location[1]);
        set.addAnimation(animation);
        
        set.setDuration(1000);
        set.setRepeatCount(0);
        set.setInterpolator(new MyInterpolator());
        from.startAnimation(set);

     自己定义的几种插值器

    /**
         * 插值器类中的方程是 时间和变化幅度(如TranslateAnimation动画,则代表的位移) 0,0 ---1,1 区域内的曲线方程。当然,也可以超出这个区域,但是曲线必须经过1,1这个点
         * 变化速率或速度调整当然就是切线角度了
         * @author cs
         *
         */
        static class MyInterpolator implements Interpolator{
    
            @Override
            public float getInterpolation(float input) {
                return getSquareDown(input);
            }
            //速度慢慢增大,再减小。
            private static float getSin(float input){
                return (float) (Math.sin(input*Math.PI-Math.PI/2)+1)/2;
            }
            //速度持续增大
            private static float getCubeUp(float input){
                return input*input*input;
            }
            //速度慢慢减缓。
            private static float getSquareDown(float input){
                input -= 1;
                return -input*input+1;
            }
            // 非平滑曲线 
            private static float getSeparete(float input){
                if(input<0.2){// 会有突变到暂停不变的效果
                    return 0.1f;
                }else{
                    return (9*input-1)/8;
                }
            }
            
        }
  • 相关阅读:
    SQLServer2000同步复制技术实现步骤作者
    权限管理数据表设计说明
    vps配置笔记(10)架设svn服务
    电子商务网站的10个易用性规则
    WebBrowser中显示乱码
    xampp apache 无法启动
    网站安全之XSS漏洞攻击以及防范措施
    IEnumerable
    深入了解ASP.NET运行内幕
    单IP泛域名绑定
  • 原文地址:https://www.cnblogs.com/boliu/p/3295944.html
Copyright © 2020-2023  润新知