Android动画总结
来源:互联网 发布:淘宝汽车用品好做吗 编辑:程序博客网 时间:2024/06/07 16:38
一、帧动画
- AnimationDrawable—>DrawableContainer—>Drawable
1.res/anim中:
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> //是否只执行一次 <item android:drawable="@drawable/title1" android:duration="150"/> <item android:drawable="@drawable/title2" android:duration="150"/></animation-list>
2.代码中: 控件.setBackgroundResource(R.anim.xx); AnimationDrawable anima = (AnimationDrawable) 控件.getBackground(); anima.start();
二、补间动画:
- TranslateAnimation,AlphaAnimation,ScaleAnimation,RotateAnimation—>Animation
- AnimationSet—>Animation
- 监听:Animation中:AnimationListener
onAnimationStart(Animation anim);
onAnimationEnd(Animation anim);
onAnimationRepeat(Animation anim); 缺点:并没有真正持久改变View的属性(身心不一),就是说它内部没有一个去记录动画行为的机制;
1.代码中:
XxxAnimation anim = new XxxAnimation(…);
anim.setDuration(1000);
anim.setInterpolator(Interpolator i);
anim.setRepeatCount(Animation.INFINITE);
anim.setRepeatMode(Animation.REVERSE);
anim.setFillAfter(true);
控件.startAnimation(ta);//true表示各子动画共用set的插值器,false表示各子动画用各自的插值器AnimationSet set = new AnimationSet(false);set.addAnimation(ta);控件.startAnimation(set);
2.res/anim中:
<alpha/scale/rotate/translate .../> 或<set android:fillAfter="true"> <alpha/scale/rotate/translate .../></set>
3.代码中使用xml定义的动画: Animation anim = AnimationUtils.loadAnimation(this, R.anim.xx); 控件.startAnimation(anim);
三、属性动画: (3.0=11后推出,因View增加了很多属性,故叫属性动画. 心身合一)
- ObjectAnimator—>ValueAnimator—>Animator
- AnimatorSet—>Animator
- 监听:
- Animator中:AnimatorListener
onAnimationStart(Animator anim);
onAnimationEnd(Animator anim);
onAnimationCancel(Animator anim);
onAnimationRepeat(Animator anim); - Animator中:AnimatorPauseListener
onAnimationPause(Animator anim);
onAnimationResume(Animator anim); ValueAnimator中:AnimatorUpdateListener
onAnimationUpdate(ValueAnimator anim);重要方法:
- Animator中:
addListener(AnimatorListener listener) 装在ArrayList中
addPauseListener(AnimatorPauseListener listener):装在ArrayList中
removeAllListeners() 将上面两个集合清空
removeListener(AnimatorListener listener) 将上面第一个集合清空
removePauseListener(AnimatorPauseListener listener) 将上面第二个集合清空
start()开启动画 end()结束动画
pause()暂停动画 resume()恢复动画
cancel()取消动画
isStarted()动画是否已经开启,且未结束
isPaused()动画是否暂停
isRunning()动画是否正在执行
setDuration(long duration) 设置执行时长
setInterpolator(TimeInterpolator i) 设置插值器
setStartDelay(long delay) 开启动画后,延迟指定时间执行
setTarget(Object target) 将本动画绑定到目标控件上 ValueAnimator重要特有:
addUpdateListener(AnimatorUpdateListener listener) 装在ArrayList中
removeAllUpdateListeners()清空所有监听
removeUpdateListener(AnimatorUpdateListener listener) 移除指定监听
getAnimatedFraction() 获取当前已执行的百分比
getAnimatedValue() 获取当前正在执行的值
getCurrentPlayTime() 获取自开启后已执行的时间1.代码中:
ObjectAnimator anim = ObjectAnimator.ofFloat(控件, “属性名”, 可变参数);
anim.setDuration(1000);
anim.setInterpolator(Interpolator i);
anim.setRepeatCount(Animation.INFINITE);
anim.setRepeatMode(Animation.REVERSE);
anim.start();AnimatorSet set = new AnimatorSet();set.playSequentially(Animator...);set.playSequentially(List<Animator> 集合);set.playTogether(Animator...);set.playTogether(Collection<Animator> 集合);
2.res/animator中:
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="alpha" android:duration="3000" android:repeatCount="3" android:repeatMode="reverse" android:valueFrom="0.0" android:valueTo="1.0" ></objectAnimator>
3.代码中使用xml定义的动画: Animator anim = AnimatorInflater.loadAnimator(this, R.animator.xx); anim.setTarget(控件); anim.start();
四、值动画:ValueAnimator
1.代码中: ValueAnimator anim = ValueAnimator.ofFloat(可变参数); anim.addUpdateListener(mListener); anim.start();
五、属性动画的向下兼容: NineOldAnidroid.jar—–JackWharton
三大核心类: ViewPropertyAnimator, ViewHelper, ValueAnimator
ViewPropertyAnimator
.animate(目标控件)
.setDuration(100)
.setInterpolator(new OvershootInterpolator())
.scaleX/Y(float v) 原始缩放
.scaleX/YBy(float v)增量缩放
.alpha(float v) 透明
.alphaBy(float v)
.rotation(float v) 平面原始旋转
.rotationBy(float v)平面增量旋转
.rotationX/Y(float v) X/Y轴原始旋转
.rotationX/YBy(float v) X/Y轴增量旋转
.translationX/Y(float v) 平移
.translationX/YBy(float v)
.setListener(Animator.AnimatorListener)
.setStartDelay(1000)
.start();ViewHelper.setAlpha(目标控件,float v); 设置透明度
ViewHelper.setScaleX/Y(目标控件,float v); 设置X/Y轴缩放
ViewHelper.setRotation(目标控件,float v); 设置平面旋转
ViewHelper.setRotationX/Y(目标控件,float v); 设置X/Y轴旋转
ViewHelper.setTranslationX/Y(目标控件,float v); 设置X/Y轴平移到
ViewHelper.setPivotX/Y(目标控件,float v); 设置中心坐标
ViewHelper.setX/Y(目标控件,float v); 设置相对控件左上角X/Y轴坐标ValueAnimator 用法与原生的ValueAnimator一样
六、各类插值器—->TimeInterpolator
|AccelerateDecelerateInterpolator |在动画开始与结束的地方速率改变比较慢,在中间的时候加速|
|AccelerateInterpolator|在动画开始的地方速率改变比较慢,然后开始加速|
|AnticipateInterpolator |开始的时候向后然后向前甩|
|AnticipateOvershootInterpolator |开始的时候向后然后向前甩一定值后返回最后的值|
|BounceInterpolator|动画结束的时候弹起|
|CycleInterpolator |动画循环播放特定的次数,速率改变沿着正弦曲线|
|DecelerateInterpolator|在动画开始的地方快然后慢|
|LinearInterpolator|以常量速率改变|
|OvershootInterpolator|向前甩一定值后再回到原来位置|
- 自定义插值器
1.继承TimeInterpolator
2.重写
public float getInterpolation(float input) {
return 数字公式,如(float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}
八、估值器—–>TypeEvaluator
public T evaluate(float fraction, T startValue, T endValue);
* ArgbEvaluator 透明估值器
* IntEvaluator, IntArrayEvaluator
* FloatEvaluator, FloatArrayEvaluator
* RectEvaluator 矩形估值器
* PointFEvaluator 点估值器
九、注意事项
1.应开子线程去播放动画2.动画要想生效,必须有父容器
- Android 动画总结-Layout动画
- Android 动画总结-帧动画
- Android 动画总结-属性动画
- Android 动画总结-矢量动画
- Android动画总结!!!!
- android 动画总结
- Android动画总结
- Android 动画 总结
- android:ViewPager动画总结
- android 动画效果总结
- android动画总结
- Android 属性动画总结
- Android 属性动画总结
- Android 基础动画总结
- android动画总结
- Android的动画总结
- Android动画总结
- Android动画总结
- MySQL 开发大数量访问程序时程序员最要关心的数据连接问题(图文)
- lamp-server 源码安装
- java内存区域
- R语言数据处理详解
- Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果
- Android动画总结
- 使用scrapy爬取拉勾网职位信息
- 在类中使用array_map()简单的递归过滤一些字符
- python学习——IO编程——文件读写
- 为什么要重写hashcode()
- EmberJS快速入门(二)
- Android6.0系统悬浮窗权限的问题解决方法
- qt sqlite数据库操作
- Java equals方法编写规范 —— 牢记这5条军规