属性动画
来源:互联网 发布:淘宝眼镜店推荐知乎 编辑:程序博客网 时间:2024/06/06 19:44
补间动画 :
1.只作用于View,不能作用于对象 比如:在这个View当中有一个Point对象用于管理坐标,然后在onDraw()方法当中就是根据这个Point对象的坐标值来进行绘制的。也就是说,如果我们可以对Point对象进行动画操作,那么整个自定义View的动画效果就有了。显然,补间动画是不具备这个功能的,这是它的第一个缺陷
2.就是它只能够实现移动、缩放、旋转和淡入淡出这四种动画操作,都是硬编码,拓展性差。(改变背景色就不可以)
3.就是它只是改变了View的显示效果而已,而不会真正去改变View的属性:比如按钮的位置改变,但是点击事件的位置不能改变
属性动画: 无限制,在对象也可以。扩展性强
ValueAnimator
1.我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。
除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画 设置监听器等,确实是一个非常重要的类。
在监听中对view绑定设置
例子:
ValueAnimator anim = ValueAnimator.<span>ofFloat(<span></span><span class="number">0</span><span>.0F, </span><span class="number">360</span><span>.0F)</span><span class="comment">//</span><span> </span></span>anim.setDuration(300);anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float currentValue = (float) animation.getAnimatedValue(); Log.d("TAG", "cuurent value is " + currentValue); view.setTranslationY((Float) animation.getAnimatedValue()); }});anim.start();
也可以用ofInte()这个方法针对int,还有ofObject();在下边说
除了anim.start();调用setStartDelay()方法来设置动画延迟播放的时间,调用setRepeatCount()和setRepeatMode()方法来设置动画循环播放的次数以及循环播放的模式,循环模式包括ObjectAnimator.RESTART和ObjectAnimator.REVERSE两种,分别表示重新播放和倒序播放的意思。
ObjectAnimator
ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);animator.setDuration(5000);animator.start();
组合动画AnimatorSet
多个集合在一起
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();
实现动画的监听:注意 是动画执行的监听
addListener,而不是执行属性的监听
addUpdateListener
anim.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {}@Overridepublic void onAnimationCancel(Animator animation) {}});如果不想监听那么多 可以用adapter 用哪个 写那个就可以了,不写也不报错
anim.addListener(new AnimatorListenerAdapter() {});在xml中实现属性动画 新建一个animator文件夹
- <animator> 对应代码中的ValueAnimator
- <objectAnimator> 对应代码中的ObjectAnimator
- <set> 对应代码中的AnimatorSet
<animator xmlns:android="http://schemas.android.com/apk/res/android" android:valueFrom="0" android:valueTo="100" android:valueType="intType"/>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:propertyName="alpha"/>
<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>
在java中引用的代码
Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);animator.setTarget(view);animator.start();
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 安装mysql驱动及连接数据库
- 4.3. D-Bus系列之获取发送者UID及PID的方法
- Ubuntu Server 14.04下安装桌面环境后出现只有Guest模式的解决方法
- 一名程序员用爬虫技术分析了福州7740家餐厅数据
- Xml HttpClient
- 属性动画
- Tomcat建立多个应用(Web Server),多个主机,多个站点的方法
- adjacent adj. 相邻; 邻近的,毗邻的; (时间上) 紧接着的;
- mysql数据库启动报错Starting MySQL.The server quit without updating PID file..
- C#解决引用第三方dll没有强签名问题
- Spring-Boot中如何使用多线程处理任务
- Xml 主页
- Codeforces 708C Centroids(树形dp)
- 较详细的介绍JNI