android:id=“@+id/circle1”
android:layout_width=“140dp”
android:layout_height=“140dp”
android:layout_gravity=“center”
android:src=“@drawable/scan_circle”/>
<ImageView
android:id=“@+id/circle2”
android:layout_width=“140dp”
android:layout_height=“140dp”
android:layout_gravity=“center”
android:src=“@drawable/scan_circle”/>
<ImageView
android:id=“@+id/circle3”
android:layout_width=“140dp”
android:layout_height=“140dp”
android:layout_gravity=“center”
android:src=“@drawable/scan_circle”/>
<ImageView
android:id=“@+id/circle4”
android:layout_width=“140dp”
android:layout_height=“140dp”
android:layout_gravity=“center”
android:src=“@drawable/scan_circle”/>
<ImageView
android:id=“@+id/img”
android:layout_width=“155dp”
android:layout_height=“155dp”
android:src=“@drawable/ic_music”
android:layout_gravity=“center”/>
效果如下:
之前已经写过一篇研究属性动画的Blog:属性动画详解
所以这一章基本不会写太多,就是看看样例而已。
AnimatorSet
补间动画的组合动画用AnimatonSet,而属性动画的组合动画用AnimatorSet。
这里有两个比较重要的函数,而且我们平时一般不用valueAnimation做组合动画,所以这两个函数一般用在objectAnimation比较多。
- playSequentially()
它有两个构造函数
(1)playSequentially(Animator …items);
(2)playSequentially(List< Animator> items);
依次播放参数中的动画
- playTogether()
也有两个构造函数:
(1)playTogether(Animator …items);
(2)playTogether(List< Animator> items);
一同播放参数中所有的动画
这两个函数只是激活动画,而动画动不动在于这些动画本身所设置的延迟时间、循环次数。
playSequentially是上一个控件的动画做完了,就准备做下一个动画,如果上一个动画的无限循环的播放,那么就不要指望做下一个动画了。
AnimatorSet.Builder
虽然playSequentially和playTogether两个函数能够实现全部一起动或者连着动,但却不能实现A,B,C三个动画,A先动,B跟C连着动(虽然你设两个AnimatorSet应该可以做到)
这里有个更厉害的API,就是AnimationSet.Builder。
//使用
AnimatiorSet.Builder builder = animator.play(anim1);
builder.with(anim2);
//表示播放哪个动画
public Builder play(Animator anim)
//和前面的的动画一起执行
public Builder with(Animator anim)
//先执行这个动画,再执行前面的动画
public Builder before(Animator anim)
//在执行前面的动画才执行该动画
public Builder after(Animator anim)
//延迟n毫秒后执行动画
public Builder after(long delay)
如果play(playAnim)和after(afterAnim)一起用时,是先播放after中的动画~
Animator的监听器
public void addListener(AnimatorListener lintener);
此监听器和valueAnimaotr的监听器一模一样。
有实现下面的接口:
void onAnimationStart(Animator animation);
//结束时调用
void onAnimationEnd(Animator animation);
//取消时调用
void onAnimationCancel(Animator animation);
//动画重复时被调用,但是AnimationSet没有重复函数,所以该接口永远不会被执行
void onAnimationRepeat(Animator animation);
Animator的几个API
//设置单次动画的时长,会覆盖每个动画的时长
public AnimatorSet setDuration(long duration);
//设置插值器
public void setInterpolator(TimeInterpolator interpolator);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
最后文末放上一个福利:GitHub地址
PS:我GitHub中有大量高阶Android学习视频资料和面试资料包~
ra2e-1711375564714)]
最后
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
[外链图片转存中…(img-uC9E1Ewg-1711375564714)]
最后文末放上一个福利:GitHub地址
PS:我GitHub中有大量高阶Android学习视频资料和面试资料包~
欢迎大家一起交流讨论啊~