View动画-补间动画

    xiaoxiao2022-07-07  208

    View动画的四种变换效果对应着Animation的四个子类:TranslateAnimation、ScaleAnimation、RotateAnimation和AlphaAnimation,如表7-1所示。这四种动画既可以通过XML来定义,也可以通过代码来动态创建,对于View动画来说,建议采用XML来定义动画,这是因为XML格式的动画可读性更好。要使用View动画,首先要创建动画的XML文件,这个文件的路径为:res/anim/filename.xml。View动画的描述文件是有固定的语法的 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/interpolator_resource" android:shareInterpolator="["true" | "false"]"> <scale android:fromXScale="float" android:fromYScale="float" android:pivotX="float" android:pivotY="float" android:toXScale="float" android:toYScale="float" /> <alpha android:fromAlpha="float" android:toAlpha="float" /> <rotate android:fromDegrees="float" android:pivotX="float" android:pivotY="float" android:toDegrees="float" /> <translate android:fromXDelta="float" android:fromYDelta="float" android:toXDelta="float" android:toYDelta="float" /> <set> ... </set> </set>

    从上面的语法可以看出,View动画既可以是单个动画,也可以由一系列动画组成。标签表示动画集合,对应AnimationSet类,它可以包含若干个动画,并且它的内部也是可以嵌套其他动画集合的

    android:interpolator 表示动画集合所采用的插值器,插值器影响动画的速度,比如非匀速动画就需要通过插值器来控制动画的播放过程。这个属性可以不指定,默认为@android:anim/accelerate_decelerate_interpolator,即加速减速插值器android:shareInterpolator 表示集合中的动画是否和集合共享同一个插值器。如果集合不指定插值器,那么子动画就需要单独指定所需的插值器或者使用默认值。标签标示平移动画,对应TranslateAnimation类,它可以使一个View在水平和竖直方向完成平移的动画效果 android:fromXDelta——表示x的起始值,比如0; android:toXDelta——表示x的结束值,比如100; android:fromYDelta——表示y的起始值; android:toYDelta——表示y的结束值。

    下面的代码从当前位置Y方向移动

    <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fromYDelta="0%" android:interpolator="@android:interpolator/accelerate_cubic" android:toYDelta="300%"> </translate>

    Activity中调用

    class MainActivity : AppCompatActivity() { private var TAG = "MainActivity" private var button: Button? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button = findViewById(R.id.btn) val loadAnimation = AnimationUtils.loadAnimation(this, R.anim.anim) button!!.setOnClickListener { button!!.startAnimation(loadAnimation) } } }

    组合动画使用如下,引用方式同上

    <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000"> <translate android:fromYDelta="0%" android:interpolator="@android:interpolator/accelerate_cubic" android:toYDelta="300%" /> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" /> </set>
    最新回复(0)