Android 动画设计

一、帧动画加载

定义xml文件:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>


动画加载:

rocket_thrust:定义在drawable文件夹下的xml文件;

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();

注:start()方法不能在界面的oncreate()方法中调用,因为此时图片加载可能没有完成,
表现为只显示第一帧图像,可以在onWindowsFocusChanged()方法中调用。


二、补间动画

hyperspace_jump:定义在anim文件夹下的xml文件

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);

缺陷:a.只能应用在view上;b.动画形式单一,不能进行改变动画中背景颜色等高级动画;
c.最关键的是,View Animation只是改变了view的显示位置,并没有改变view的实际属性,比如说一个按钮平移到另一个地方,但该按钮可以点击的位置并没有改变。


三、属性动画

valueAnimator:最核心类;

objectAnimator:继承自valueAnimator;
AnimatorSet:动画组合:这个类提供了一个play()方法,如果我们向这个方法中传入一个
Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:
after(Animator anim) :  将现有动画插入到传入的动画之后执行
after(long delay)   :将现有动画延迟指定毫秒后执行
before(Animator anim) :  将现有动画插入到传入的动画之前执行
with(Animator anim) : 将现有动画和传入的动画同时执行


给属性动画添加监听器:Animator.addListener();参数可以new一个AnimatorListener对象,
也可以new一个AnimatorListenerAdapter对象。

属性动画的XML实现方式:在res文件夹下新建animator文件夹,所有的属性动画文件放置在该文件夹下:

Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);  
animator.setTarget(view);  //view为该动画作用的对象
animator.start();  

四、view.animate()方法,返回一个ViewPropertyAnimator对象,可以用来对该view应用属性动画。


五、插补器

a:AccelerateDecelerateInterpolator 加速减速插补器(先慢后快再慢)
b:AccelerateInterpolator 加速插补器(先慢后快)
c:AnticipateInterpolator 向前插补器(先往回跑一点,再加速向前跑)
d:AnticipateOvershootInterpolator 向前向后插补器(先往回跑一点,再向后跑一点,再回到终点)
e:BounceInterpolator 反弹插补器(在动画结束的时候回弹几下,如果是竖直向下运动的话,就是玻璃球下掉弹几下的效果)
f:CycleInterpolator 循环插补器(按指定的路径以指定时间(或者是偏移量)的1/4、变速地执行一遍,再按指定的轨迹的相反反向走1/2的时间,再按指定的路径方向走完剩余的1/4的时间,最后回到原点。假如:默认是让a从原点往东跑100米。它会先往东跑100米,然后往西跑200米,再往东跑100米回到原点。可在代码中指定循环的次数)
g:DecelerateInterpolator 减速插补器(先快后慢)
h:LinearInterpolator 直线插补器(匀速)
i:OvershootInterpolator 超出插补器(向前跑直到越界一点后,再往回跑)
j:FastOutLinearInInterpolator MaterialDesign基于贝塞尔曲线的插补器 效果:依次 慢慢快
k:FastOutSlowInInterpolator MaterialDesign基于贝塞尔曲线的插补器 效果:依次 慢快慢
l:LinearOutSlowInInterpolator MaterialDesign基于贝塞尔曲线的插补器 效果:依次 快慢慢

使用方法一:在定义动画的xml文件中设置其interpolator属性;
使用方法二:调用setInterpolator()方法。

自定义插补器:在res文件夹下新建anim文件夹,在anim下新建xml文件,重新定义已有插补器的属性值,如:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />
然后在动画的xml文件中引用自定义的插补器。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值