当前位置: 移动技术网 > IT编程>移动开发>Android > Android开发中常用动画以及动画分类解析

Android开发中常用动画以及动画分类解析

2019年04月18日  | 移动技术网IT编程  | 我要评论

67军士兵在越南前线哗变,荣智健,烈女斗夫

android开发中常用动画以及动画分类解析。

1.在3.0之后,一共出现了三种动画,帧动画、补间动画和属性动画。

帧动画:是将一个完整的动画拆分成一张张图片,然后将他们按顺序排列连贯播放; 补间动画(animation):专门为view设置的动画,可以设置有透明、旋转、缩放、位移效果;
缺点:只能给view设置动画,非view动画不能设置动画;并且只改变了view的动画效果并没有改变自身的位置; 属性动画(animator):可以实现补间动画的全部功能,也能改变对象本身的属性;

objectanimator

objectanimator是属性动画中最常用的一个类,可以通过它直接控制动画的属性。
执行单个动画:

objectanimator.offloat(image, "translationx", 0f, 500f) // 初始化动画,设置各个参数
        .setduration(3000) // 设置动画持续时间
        .start(); // 开始运行动画

多个动画一起执行(一):

objectanimator.offloat(image, "translationx", 0f, 500f).setduration(3000).start();
objectanimator.offloat(image, "translationy", 0f, 500f).setduration(3000).start();
objectanimator.offloat(image, "rotation", 0f, 360f).setduration(3000).start();

多个动画一起执行(二):

objectanimator animator1 = objectanimator.offloat(image, "translationx", 0f, 500f);
objectanimator animator2 = objectanimator.offloat(image, "translationy", 0f, 500f);
objectanimator animator3 = objectanimator.offloat(image, "rotation", 0f, 360f);
animatorset set = new animatorset();
set.setduration(3000);
set.playtogether(animator1, animator2, animator3);
set.start();

多个动画可以按先后顺序执行(一):

objectanimator animator1 = objectanimator.offloat(image, "translationx", 0f, 500f);
objectanimator animator2 = objectanimator.offloat(image, "translationy", 0f, 500f);
objectanimator animator3 = objectanimator.offloat(image, "rotationx", 0f, 360f);
objectanimator animator4 = objectanimator.offloat(image, "rotationy", 0f, 360f);
animatorset set = new animatorset();
set.play(animator3).before(animator2).after(animator1).with(animator4);
set.setduration(3000);
set.start();

多个动画可以按先后顺序执行(二):
设置监听animatorlistener

objectanimator animator1 = objectanimator.offloat(image, "alpha", 0f, 1f);
final objectanimator animator2 = objectanimator.offloat(image, "translationx", 0f, 500f);
final objectanimator animator3 = objectanimator.offloat(image, "translationy", 0f, 500f);
animator1.setduration(3000);
animator2.setduration(3000);
animator3.setduration(3000);
// 设置属性动画的监听事件(使用animatorlistener必须要监听所有四个事件)
animator1.addlistener(new animator.animatorlistener() {
    @override
    public void onanimationstart(animator animation) {
        animator2.start();
    }
    @override
    public void onanimationend(animator animation) {
        animator3.start();
    }
    @override
    public void onanimationcancel(animator animation) {
    }
    @override
    public void onanimationrepeat(animator animation) {
    }
});
animator1.start();

多个动画可以按先后顺序执行(三):
设置监听animatorlisteneradapter

// 设置属性动画的监听事件(使用animatorlisteneradapter可以选择不监听所有事件)
animator1.addlistener(new animatorlisteneradapter() {
    @override
    public void onanimationend(animator animation) {
        animator3.start(); // 在animator1执行完后执行animator3
    }
    @override
    public void onanimationstart(animator animation) {
        animator2.start(); //在animator1执行的同时执行animator2
    }
});
animator1.start();

valueanimator

valueanimator是整个属性动画最核心的类,objectanimator是valueanimator的子类,valueanimator负责改变对象的属性值通过不断计算来改变的,valueanimator还负责管理动画的播放次数、播放模式和动画监听等。
valueanimator的监听:
valueanimator还可以通过setrepeatcount()和setrepeatmode()方法来设置动画重复的次数和播放模式、通过setstartdelay()方法来设置动画延迟播放的时间

valueanimator animator = valueanimator.ofint(0, 100); // 产生一个从0到100变化的整数的动画
animator.setduration(2000);
animator.addupdatelistener(new valueanimator.animatorupdatelistener() {
    @override
    public void onanimationupdate(valueanimator animation) {
        integer value = (integer) animation.getanimatedvalue(); // 动态的获取当前运行到的属性值
        ((button) view).settext(value + "");
    }
});
animator.start(); // 开始播放动画

在xml中编写动画

在这里面编写动画的话可以实现动画的重用;
在项目的res目录下创建一个名为animator的文件夹,在这个文件夹中定义动画。animator动画xml文件中可以包括以下三种标签:
- :相当于java代码中的valueanimator;
- :相当于java代码中的objectanimator;
- :相当于java代码中的animatorset。
定义valueanimator:


定义objectanimator:


动画组合:

?xml version="1.0" encoding="utf-8"?>


    

    

    
        

        
    

代码调用方法:

animator animator = animatorinflater.loadanimator(mainactivity.this,r.animator.object_animator);
animator.settarget(view);
animator.start();

interpolator

nterpolator的作用是可以控制动画的变化速率
,常用api:

1)  bounceinterpolator:弹跳效果;
2)  accelerateinterpolator:逐渐加速;
3)  decelerateinterpolator:逐渐减速;
4)  acceleratedecelerateinterpolator:先加速后减速;
5)  overshootinterpolator:到达目标点时“跑过头了”,再返回到目标点;
6)  anticipateinterpolator:移动之前先向后“助跑”;
7)  anticipateovershootinterpolator:overshootinterpolator和anticipateinterpolator的组合效果;
8)  cycleinterpolator:对于指定的动画,正向做一遍,反响做一遍;

android中还为我们提供了一个接口timeinterpolator,供我们自定义插值器。我们也可以实现timeinterpolator的一些已有实现类(如baseinterpolator、interpolator)来自定义插值器。
timeinterpolator接口中又一个抽象方法setinterpolation(),方法中又一个参数input,这个参数的值在整个动画过程中从0匀速变化到1,也就是相当于一个百分比,指示当前动画播放到哪了。

viewpropertyanimator

viewpropertyanimator让我们可以使用链式,一行代码为一个view对象设置属性,示例代码如下:

textview.animate()
        .translationx(200)
        .translationy(200)
        .setduration(2000)
        .setinterpolator(new bounceinterpolator())
        .start();

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网