zoukankan      html  css  js  c++  java
  • 属性动画

    1、ValueAnimator

    (1)继承关系图

    继承自父类Animator

    (2)创建对象,一般来说,常用来创建ValueAnimator的对象为静态方法ofInt,ofFloat,ofPropertyValuesHolder,ofObject,在内部实际上也是调用相关的属性构造对象

     public static ValueAnimator ofInt(int... values) {
            ValueAnimator anim = new ValueAnimator();
            anim.setIntValues(values);
            return anim;
     }

    (3)启动动画:start

    (4)监听值变化事件:addUpdateListener

    (5)实例:点击按钮开始动画,改变TextView的文字

            btnStart.setOnClickListener(new OnClickListener() {
                
                @SuppressLint("NewApi")
                @Override
                public void onClick(View v) {
                    
                    ValueAnimator animator = ValueAnimator.ofFloat(0, 1f, 3f, 100f,1000f);
                    animator.setDuration(300).addUpdateListener(new AnimatorUpdateListener() {
                        
                        @Override
                        public void onAnimationUpdate(ValueAnimator animation) {
                            tvText.setText(animation.getAnimatedValue()+"");
                        }
                    });
                    animator.start();
                }
            });
            

    2、ObjectAnimator

    (1)类集成关系图

    可以看到ObjectAnimator也是继承自ValueAnimator.

    (2)创建对象

    创建ObjectAnimator对象的方法和ValueAnimator类似,但是增加了一个属性参数,拿ofFloat来说,源码:

     public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) {
            ObjectAnimator anim = new ObjectAnimator(target, propertyName);
            anim.setFloatValues(values);
            return anim;
        }

    创建的时候也是调用了构造函数,构造函数中再去调用setPropertyName,将属性传入,以便后边对属性进行修改。

    (3)实例:将按钮先左移后回到原先的位置

    btnStart = (Button)findViewById(R.id.btn_start);
            btnTest = (Button)findViewById(R.id.testButton);
            
            btnStart.setOnClickListener(new OnClickListener() {
                
                @SuppressLint("NewApi") @Override
                public void onClick(View v) {
                    float transX = btnTest.getTranslationX();
                    ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(btnTest, "translationX", transX, -1 * btnTest.getWidth(), transX);
                    objectAnimator.setDuration(3000);
                    objectAnimator.start();
                }
            });

    3、组合动画AnimatorSet实现多重效果

    (1)继承关系

    (2)实例:让按钮向右移动的同时向下移动

        btnStart.setOnClickListener(new OnClickListener() {
                
                @SuppressLint("NewApi")
                @Override
                public void onClick(View v) {
                    ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(btnTest, "translationX", btnTest.getTranslationX(), 500);
                    ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(btnTest, "translationY", btnTest.getTranslationY(), 300);
                    
                    
                    AnimatorSet animatorSet = new AnimatorSet();
                    
                    //animatorSet.play()
                    //.with()
                    //.before()
                    //.after();
                    
                    animatorSet.play(objectAnimator1).with(objectAnimator2);
                    animatorSet.setDuration(3000);
                    animatorSet.start();
                }
            });
            

    4、改变运动方式可以使用setInterpolator,进行设置,

    监听动画的状态,如开始,结束,取消等,使用addListener进行设置或者使用AnimatorListenerAdapter设置监听部分动作

    animatorSet.addListener(new AnimatorListener() {
                        
                        @Override
                        public void onAnimationStart(Animator animation) {
                            // TODO Auto-generated method stub
                            
                        }
                        
                        @Override
                        public void onAnimationRepeat(Animator animation) {
                            // TODO Auto-generated method stub
                            
                        }
                        
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            // TODO Auto-generated method stub
                            
                        }
                        
                        @Override
                        public void onAnimationCancel(Animator animation) {
                            // TODO Auto-generated method stub
                            
                        }
                    });

     5、使用xml布局写属性动画

    (1)创建animator文件夹

    (2)设置动画的对象

    (3)实例

    <?xml version="1.0" encoding="utf-8"?>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
        android:duration="1000"
        android:propertyName="translationX"
        android:valueFrom="0dp"
        android:valueTo="100dp">
    </objectAnimator>
                    Animator animator = AnimatorInflater.loadAnimator(AnimatorSetActivity.this, R.animator.trans_btntest);
                    animator.setTarget(btnTest);
                    animator.start();

    (4)xml布局实现组合动画,很简单,只需要将两个animator卸载set中,进行加载执行就好。

    这里:属性中可以标注是顺序播放或者是同时播放的关系。

    <animator> 对应代码中的ValueAnimator
    <objectAnimator> 对应代码中的ObjectAnimator
    <set> 对应代码中的AnimatorSet

    <?xml version="1.0" encoding="utf-8"?>
    
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <objectAnimator 
            android:duration="1000"
            android:propertyName="translationX"
            android:valueFrom="0dp"
            android:valueTo="100dp">
        </objectAnimator>
        
        
        <objectAnimator 
            android:duration="1000"
            android:propertyName="translationY"
            android:valueFrom="0dp"
            android:valueTo="100dp">
        </objectAnimator>
    </set>

    6、

  • 相关阅读:
    js中的计时器事件`setTimeout()` 和 `setInterval()`
    我的人生“意义”
    我活着的“形而上学”
    关于“我的”恶意
    不排他,与“我”的可能性
    【原创诗歌】自觉原理第十六章让你想照亮前程
    【原创诗歌】读书的梦:羡慕与期待
    【原创】楼兰老家
    【原创诗歌】青春咒语
    【原创】仓央嘉措,在心底活着
  • 原文地址:https://www.cnblogs.com/hpustudent/p/4589813.html
Copyright © 2011-2022 走看看