动画相关

ObjectAnimator 属性动画

方法:

//第一个参数:指定执行动画的控件,第二个参数:指定控件的属性,第三个参数是可变长参数
//propertyName:alpha(透明)、rotationX(围绕x轴旋转)、rotationY(围绕y轴旋转)、rotation(围绕z轴旋转)、
//translationX(在x轴上平移)、translationY(在y轴上平移)、scaleX(在x轴缩放)、scaleY(在y轴上缩放)

public static ObjectAnimator ofFloat(Object target, String propertyName, float... values)

ObjectAnimator动画原理:根据属性值拼装成对应的set函数的名字,比如”scaleY”的拼接方法就是将属性的第一个字母强制大写后,与set拼接,也就是setScaleY,然后通过反射找到对应控件的setScaleY(float scaleY)函数,将当前数字值作为setScaleY(float scale)的参数将其传入。属性值得首字母大小写都可以,最终都会被强转成大写。View中都已经实现了相关的alpha rotation translate scale相关的set方法。

在自定义的动画中,要设置相对应的setter、getter方法,不然动画是不会执行的。

xml自定义动画

android:duration      动画持续时间,以毫秒为单位 
android:fillAfter     如果设置为true,控件动画结束时,将保持动画最后时的状态
android:fillBefore    如果设置为true,控件动画结束时,还原到开始动画前的状态
android:fillEnabled   与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
android:repeatCount   重复次数
android:repeatMode    重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,
                      必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
android:interpolator  设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。

1、设置xml时,里面有些数值的含义,例如scale的pivotX,可以为50,50%,50%p

数值 含义
50 view左上角加50像素
50% 左上角加上自己宽度的50%
50%p (p代表parent,即父控件)左上角加上父控件宽度的50%

2、通过Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scaleanim);从XML文件中获取动画

ViewPropertyAnimator

用法很简单:view.animate().动画的方法(),例如translateX()、scaleX()、rotate()等等,此方法是Android 3.0 加入的

Interpolator 插值器

在动画中改变动画效果的属性,通过setInterpolator()来设置想要的动画效果

现有的插值器介绍:

插值器名称 效果
AccelerateDecelerateInterpolator 默认的插值器,效果是从速度为 0 开始逐渐加速,然后再逐渐减速直到 0
LinearInterpolator 匀速的
AccelerateInterpolator 持续加速
DecelerateInterpolator 持续减速到0
AnticipateInterpolator 先回拉一下再进行正常动画轨迹
OvershootInterpolator 动画会超过目标值一些,然后再弹回来
AnticipateOvershootInterpolator 开始前回拉,最后超过一些然后回弹。上面两个的结合版
BounceInterpolator 在目标值处弹跳,直到0
CycleInterpolator 一个正弦 / 余弦曲线的运动,根据构造里的参数 new CycleInterpolator(float cycles) 来决定运动周期,例如:0.25f,到最远处;0.5f,到最远处又回到起点
PathInterpolator 自定义动画完成度 / 时间完成度曲线

自定义的PathInterpolator,其实就是画一个Path,图片运行的速度就是你图形那个时间点的斜率,斜率越大,速度越快,反之,则越小。使用自定义的Path的时候,有一点要切记,同一时间点对应的path,只能有唯一的对应的一种状态,且不能断点,否则会NG,画个图理解下:

动画相关_第1张图片

时间横轴对应的状态纵轴有且只有一个点,这种是正确的。

动画相关_第2张图片

时间横轴对应的状态纵轴有两种状态,或者否个时间点,没有对应的状态,这种会造成程序FC。

ValueAnimator 属性动画

用做数字的变化居多,方法也不多

ValueAnimator animator = ValueAnimator.ofInt(0,400);  
animator.setDuration(1000);  
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
    @Override  
    public void onAnimationUpdate(ValueAnimator animation) { 
        // 数据实时改变
        int curValue = (int)animation.getAnimatedValue(); 
    }  
}); 
animator.start();

你可能感兴趣的:(android)