Android开发中常用动画以及动画分类解析
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();
上一篇: 荣耀20i价格公布后卢伟冰发声:感受下
下一篇: 川龙峡漂流门票多少钱 川龙峡漂流门票
推荐阅读
-
详解iOS开发中的转场动画和组动画以及UIView封装动画
-
Android动画开发常见属性解析
-
Android开发中各种动画使用教程
-
Android开发中常用动画以及动画分类解析
-
Android开发中属性动画(ObjectAnimator)中 插值器(Time Interpolator )详解
-
详解iOS开发中的转场动画和组动画以及UIView封装动画
-
Android动画开发常见属性解析
-
android studio 开发自定义按键以及基础动画
-
Android开发中各种动画使用教程
-
Android开发中属性动画(ObjectAnimator)中 插值器(Time Interpolator )详解