美文网首页
安卓动画

安卓动画

作者: yankelin | 来源:发表于2016-08-04 21:31 被阅读0次

    补间动画 帧动画 属性动画

    TweeAnimation 补间动画

    只可以改变两个关键帧之间的透明度,旋转,缩放,位移四个变化

    AlphaAnimation
    RotateAnimation
    ScaleAnimation
    TranslateAnimation

    1. 设置动画的资源文件

    补间动画的资源文件

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="true"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        >
        <scale android:fromXScale="1.0"
               android:toXScale="2.0"
               android:fromYScale="1.0"
               android:toYScale="2.0"
               android:fillAfter="true"
               android:duration="3000"
               />
    </set>
    
    animation=AnimationUtils.loadAnimation(this, R.anim.anim_1);//加载动画资源
    btn.setOnClickListener(this);//启动动画
    
    1. 直接在代码中设置动画
     RotateAnimation animation = new RotateAnimation(0, 2700);//创建动画
     animation.setDuration(10000);//设置时长
     animation.setRepeatCount(5);//设置重复次数
     animation.setInterpolator(new AnticipateInterpolator());//设置插值器
     animation.setAnimationListener(this);//设置监听
     mButton1.startAnimation(animation);//启动动画
    

    TimeInterpolator和TypeEvaluator

    TimeInterpolator中文翻译为时间插值器,它的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比

    系统预置的有LinearInterpolator(线性插值器:匀速动画)、AccelerateDecelerateInterpolator(加速减速插值器:动画两头慢中间快)和DecelerateInterpolator(减速插值器:动画越来越慢)等

    TypeEvaluator的中文翻译为类型估值算法,它的作用是根据当前属性改变的百分比来计算改变后的属性值

    系统预置的有IntEvaluator(针对整型属性)、FloatEvaluator(针对浮点型属性)和ArgbEvaluator(针对Color属性)

    为补间动画添加插值器Interpolator

    • 几种插值器
    1. 越来越快 AccelerateInterpolator()
    2. 越来越慢 DecelerateInterpolator()
    3. 先快后慢 AccelerateDecelerateInterpolator()
    4. 先后退一小步然后向前加速 AnticipateInterpolator()
    5. 快速到达终点超出一小步然后回到终点 OvershootInterpolator()
    6. 到达终点超出一小步然后回到终点 AnticipateOvershootInterpolator()
    7. 弹球效果,弹几下回到终点 BounceInterpolator()
    8. 均匀速度 LinearInterpolator()

    帧动画

    Frame Animation是顺序播放事先做好的图像,跟电影类似。不同于animation package,Android SDK提供了另外一个类AnimationDrawable来定义使用Frame Animation。
    利用xml文件实现:res/drawable-hdpi/frame.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:oneshot="true">
           <item android:drawable="@drawable/p1" android:duration="1000"/>
           <item android:drawable="@drawable/p2" android:duration="1000"/>
           <item android:drawable="@drawable/p3" android:duration="1000"/>
    </animation-list>
    
    • 使用帧动画
    AnimationDrawable anim = (AnimationDrawable)getResources().  
    getDrawable(R.drawable.frame);  
    textWidget = (TextView)findViewById(R.id.text_widget);  
    textWidget.setText("背景渐变动画效果");  
    textWidget.setBackgroundDrawable(anim);  
    anim.start();
    

    属性动画

    ValueAnimation

    ObjectAnimation

    AnimatorSet

    动画的常见使用场景

    在ViewGroup中控制子元素的出场效果

    1. 在anim文件夹中给ViewGroup设置动画
     <?xml version="1.0" encoding="utf-8"?>
     <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
                     android:animation="@anim/animation_item"
                     android:animationOrder="normal"
                     android:delay="0.2">
        <!--animation 给子控件设置动画资源-->
        <!--animationOrder 是定义子控件的出场顺序-->
        <!--delay 是定义两个子控件的动画延迟时间,0.2是延迟的倍数-->
    </layoutAnimation>
    
    1. 在anim文件夹中给子控件设置动画效果
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
         android:duration="500"
         android:interpolator="@android:interpolator/anticipate"
         android:shareInterpolator="true"
        >
        <alpha
            android:fromAlpha="0"
            android:toAlpha="1"/>
        <translate
            android:fromXDelta="500"
            android:toXDelta="0"/>
    </set>
    
    • 这种方式也可在代码中通过LayoutAnimationController设置

    Activity,Fragment的切换效果

    1. 设置activity的场景转换动画
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
         android:duration="5000"
         android:interpolator="@android:interpolator/anticipate"
         android:shareInterpolator="true">
        <rotate
            android:fromDegrees="90"
            android:toDegrees="0"/>
        <translate
            android:fromXDelta="500"
            android:toXDelta="0"
            />
    </set>
    
    1. 启动activity的时候设置activity的转场动画,调用方法 overridePendingTransition,该方法必须在startActivity方法和finish方法之后调用才有效果
    Intent intent = new Intent(this, SeconActivity.class);
                    startActivity(intent);
                    overridePendingTransition(R.anim.activity_enter, R.anim.activity_out);
                    //分别设置进场和出场的动画效果
    

    相关文章

      网友评论

          本文标题:安卓动画

          本文链接:https://www.haomeiwen.com/subject/fpqhsttx.html