Android动画(Android开发艺术探索笔记)

Android动画分为帧动画,view动画(个人更喜欢叫补间动画),属性动画(3.0加入)三种。

  • 帧动画 像电影一样,播放一组预先定义好的图片。(AnimationDrawable)
    • XML定义
    • 代码编写
<!-- drawable文件夹下 !-->
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" android:variablePadding="true" android:visible="true" >
    <item android:drawable="@mipmap/ic_launcher" android:duration="300"/>
    <item android:drawable="@mipmap/ic_launcher" android:duration="300"/>

</animation-list>

oneshot:是否播一次
variablePadding:drawable的padding值是否随当前的状态值改变
visiable:是否可见

代码设置

Button button = (Button) findViewById(R.id.button1);
        button.setBackgroundResource(R.drawable.fram_animation);
        AnimationDrawable drawbale = (AnimationDrawable) button.getBackground();
        drawbale.start();
  • View动画
    View动画的四种变换效果对应着Animation的四个子类:TranslateAnimation(translate)、ScaleAnimation(scale)、RotateAnimation(rotate)、AlphaAnimation(alpha)。这些既可以通过代码来写,也可以通过XML来定义。
    < set> 标签标示动画的集合,对应AnimationSet类。该标签可使用的属性如下图。
  • 说明
    • interpolator 插值器,@android:anim/xxx 可调用系统的
    • fillEnable 是否允许填充
    • fillAfter 停留在最后状态
    • fillBefore 停留在开始状态
    • duration 持续时间
    • repeatCount 动画重复次数
    • repeatMode 重复模式
    • zAdjustment 动画在播放期间,是否调整z轴顺序(top,标示在其他控件上面)
    • detacjWallpaper window动画的一个属性,一般没用。

Android动画(Android开发艺术探索笔记)_第1张图片
这里的属性就简单了,不说了。

<set>
    <scale 
        ...
        />
    <..
        />
</set>

接下来看看代码中怎么写。

Animation animation  = AnimationUtils.loadAnimation(this,R.anim.anim_item);
        button.startAnimation(animation);

So eazy 不是么 。

  • LayoutAnimation
    LayoutAnimation作用于ViewGroup,为ViewGroup置顶动画,这样当它的子元素出场时都会具有这种动画。常常被用于ListView上。咱来看看他又哪些属性
    Android动画(Android开发艺术探索笔记)_第2张图片
  • 说明
    • delay 延迟
    • animationOrder 动画播放的顺序

这种动画也可以通过XML设置

android:layoutAnimation=""

或者通过代码

listView = (ListView) findViewById(R.id.container);
        Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);

        LayoutAnimationController  controller= new LayoutAnimationController(animation);

        controller.setDelay(3f);
        controller.setOrder(LayoutAnimationController.ORDER_NORMAL);

        listView.setLayoutAnimation(controller);
  • Activity切换动画
overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);

第一个表示进入动画,第二个表示退出动画。需要注意的是:需要在startActivity或者finsh之后才会有效。

  • 属性动画 3.0加入
    • ValueAnimator 对值进行过度 对应animator标签
    • ObjectAnimator 任意对象(需要有对应的set方法) 对应ObjectAnimator标签

Android动画(Android开发艺术探索笔记)_第3张图片
上面是ValueAnimator的,ObjectAnimator比他多了一个propetyName属性。关于属性的具体意思就不说了,图里面很清楚。

<?xml version="1.0" encoding="utf-8"?>
<set  android:ordering="together" xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator />
    <animator />
</set>

注意注意注意:这里的set不再像以前那个set,以前那个set对应的是AnimationSet类,这里的AnimatorSet类,一定要注意了。一定要注意了。

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.pro);

        set.setTarget(button);
        set.start();

关于插值器和估值器,恩,还是看郭霖的吧,

  • ObjectAnimation可以对任意属性做动画(前提是有set方法)
    • 给你的对象加上get和set方法,如果你有权限的话
    • 用一个类来包装原始对象,间接为其提供set和get方法
    • 采用valueanimator,监听动画过程,自己实现属性的改变
  • 动画监听器
    • AnimatorUpdateListener(ValueAnimator类下面)
    • AnimatorListener(Animator下面)

剩下的工作原理我就在这里丢人现眼了,看书或者博客。

你可能感兴趣的:(android,动画)