Android属性动画(一):ValueAimator和ObjectAnimator的基本使用
来源:互联网 发布:python运行程序 编辑:程序博客网 时间:2024/05/21 14:53
补间动画
在属性动画之前,有补间动画(Animation类)供我们使用,为什么有了补间动画还要属性动画?
1.补间动画只能对view进行操作,有很大的局限性
2.补间动画只能实现移动,缩放,旋转,淡进淡出,其他的效果很难做到
3.补间动画只是改变了view的显示效果,而没有改变view的属性,这是很致命的
属性动画
1.ValueAimator
ValueAimator是一种对值进行操作的类
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f);//创建valueAnimator对浮点数值0f-1f进行平滑 //ValueAnimator animator = ValueAnimator.ofInt(1, 2);//创建valueAnimator对浮点数值1-2进行平滑 valueAnimator.setDuration(2000);//设置动画持续时间 valueAnimator.setStartDelay(2000);//设置延迟启动时间 valueAnimator.setRepeatCount(2);//设置重复次数 valueAnimator.setRepeatMode(MODE_APPEND);//设置重复模式 valueAnimator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {Float currentValue = (Float) animation.getAnimatedValue();Log.d(TAG, "The current value is " + currentValue);}}); valueAnimator.start();//启动动画
以上是比较常用的方法,就不详细说了,也很简单
2.ObjectAnimator
ObjectAnimator是ValueAnimator的子类,所以拥有ValueAnimator的方法和属性,比较常用
ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "alpha", 1f, 0f, 1f);//淡进淡出 //ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f); //旋转 //ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "translationX", curTranslationX, -500f, curTranslationX);
//在水平方向平移
//ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "scaleY", 1f, 3f, 1f);//y轴方向实现缩放 animator.setDuration(2000); animator.setStartDelay(2000); animator.start();
这里也是用ofFloat创建了一个ObjectAnimator实例,但是参数有些不同,第一个参数textView是想进行操作的对象,这里的对象可以是任意对象,第二个是对该对象的哪个属性进行动画操作,之后的具体的实现。好像第一个,实现的就是淡进淡出透明度从1变为0再变为1。
但是textView是没有alpha之类的这些属性的,那是如何操作的呢?
ObjectAnimator并不是直接对传入的属性进行操作,而是会去寻找操作的对象对应的get和set方法,也就是说,textView中肯定有setAlpha和getAlpha等之类的方法
3.组合动画
实现组合动画功能主要需要借助AnimatorSet这个类,这个类提供了一个play()方法,如果我们向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:
after(Animator anim) 将现有动画插入到传入的动画之后执行
after(long delay) 将现有动画延迟指定毫秒后执行
before(Animator anim) 将现有动画插入到传入的动画之前执行
with(Animator anim) 将现有动画和传入的动画同时执行
ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview, "translationX", -500f, 0f); ObjectAnimator rotate = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f); ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f); AnimatorSet animSet = new AnimatorSet(); animSet.play(rotate).with(fadeInOut).after(moveIn); animSet.setDuration(5000); animSet.start();
4.Animatior监听器
ObjectAnimator是继承自ValueAnimator的,而ValueAnimator又是继承自Animator的,因此不管是ValueAnimator还是ObjectAnimator都是可以使用addListener()这个方法的。另外AnimatorSet也是继承自Animator的,因此addListener()这个方法算是个通用的方法。
添加监听器
anim.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } //动画开始时调用 @Override public void onAnimationRepeat(Animator animation) { } //动画重复时调用 @Override public void onAnimationEnd(Animator animation) { } //动画结束时调用 @Override public void onAnimationCancel(Animator animation) { } //动画取消时调用});
添加监听器,一定要实现这四个方法,但是有时我们只想在某一时刻进行监听,而实现这四个方法就会显得很臃肿,这是我们的适配器 AnimatorListenerAdapter 就出来帮忙了
AnimatorListenerAdapter已经把每一个方法都实现好了,因此我们可以选择性得对某些方法进行重写
anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { } });
用xml编写动画和用java代码编写动画相比,可重用性更好
如果想要使用XML来编写动画,首先要在res目录下面新建一个animator文件夹,所有属性动画的XML文件都应该存放在这个文件夹当中。然后在XML文件中我们一共可以使用如下三种标签:
<animator> 对应代码中的ValueAnimator
<objectAnimator> 对应代码中的ObjectAnimator
<set> 对应代码中的AnimatorSet
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially" > <objectAnimator android:duration="2000" android:propertyName="translationX" android:valueFrom="-500" android:valueTo="0" android:valueType="floatType" > </objectAnimator> <set android:ordering="together" > <objectAnimator android:duration="3000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" android:valueType="floatType" > </objectAnimator> <set android:ordering="sequentially" > <objectAnimator android:duration="1500" android:propertyName="alpha" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" > </objectAnimator> <objectAnimator android:duration="1500" android:propertyName="alpha" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" > </objectAnimator> </set> </set> </set>上面用xml编写了一个组合动画,命名为 anim_file 那怎么样在java代码中去执行?
Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file); animator.setTarget(view); animator.start();
以上就是android动画的基础。
发现了一个非常详细的xml编写动画并解释各种属性的文章,记录一下
http://www.cnblogs.com/yc-755909659/p/4290114.html
- Android属性动画(一):ValueAimator和ObjectAnimator的基本使用
- Android属性动画(ObjectAnimator)的基本用法
- Android 属性动画valueAnimator和objectAnimator的使用
- 属性动画ValueAnimator和ObjectAnimator的使用
- Android 动画 ObjectAnimator基本使用
- android动画---ObjectAnimator基本使用
- Android中属性动画1----ObjectAnimator的基本使用(平移,缩放,渐变,旋转)
- Android中属性动画2----ObjectAnimator监听的使用
- android属性动画 —— ValueAnimator和ObjectAnimator的例子
- Android 属性动画ValueAnimator和ObjectAnimator的高级用法
- Android属性动画,ValueAnimator和ObjectAnimator的高级用法
- Android 属性动画ValueAnimator和ObjectAnimator的高级用法
- Android属性动画之ObjectAnimator使用
- Android属性动画之ObjectAnimator和AnimatorSet
- Android属性动画之ObjectAnimator和AnimatorSet
- android 动画 ValueAnimator 和ObjectAnimator 基本用法
- 强大的 Android 属性动画 ObjectAnimator
- 属性动画05-ObjectAnimator的高级使用
- SQLPlus在连接时通常有四种方式
- 大数据 URL
- 编译原理----中的文法及文法类型
- setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
- Warning: The Copy Bundle Resources build phase contains this target's Info.plist file 'x/info.plist'
- Android属性动画(一):ValueAimator和ObjectAnimator的基本使用
- Java常用快捷键
- Java中的多线程
- HTTP协议
- 二维码扫描登录
- Linux mm_struct基础
- SEO:我对原创文章的几点看法
- MYSQL查询一段时间
- sed 工具简介