注:除特殊说明停止维护外,列出的库仍在维护中。长时间未维护的依赖库,提供了jar文件的,可直接依赖jar 文件
谷歌提供
属性动画3.0以上
官方api自带
- Animators:
1 | ValueAnimator |
- Evaluators:
1 | IntEvaluator |
- Interpolators:
1 | AccelerateDecelerateInterpolator |
- 监听:
1 | Animator.AnimatorListener |
- xml
动画类对应标签ValueAnimator -> <animator>
ObjectAnimator - <objectAnimator>
AnimatorSet - <set>
代码 使用
- ValueAnimator
方法:ofInt()
, ofFloat()
,ofObject()
1 | ValueAnimator animation = ValueAnimator.ofFloat(0f, 100f); |
1 | ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue); |
使用 ValueAnimator
对象的值
- 设置
AnimatorUpdateListener
监听
1 | animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { |
ObjectAnimator
1 | ObjectAnimator animation = ObjectAnimator.ofFloat(textView, "translationX", 100f); |
1 | ObjectAnimator.ofFloat(targetObject, "propName", 1f) |
AnimatorSet
1 | AnimatorSet bouncer = new AnimatorSet(); |
监听
API:
Animator.AnimatorListener
1
2
3
4onAnimationStart()
onAnimationEnd()
onAnimationRepeat()
onAnimationCancel()ValueAnimator.AnimatorUpdateListener
1
2onAnimationUpdate()
getAnimatedValue()示例:
1 | ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f); |
ViewGroup
API:
void setAnimator(int transitionType, Animator animator)
transitionType:
1 | LayoutTransition.APPEARING |
需Layout布局属性支持:android:animateLayoutchanges= true
View状态动画
1 | <?xml version="1.0" encoding="utf-8"?> |
布局引用: android:stateListAnimator
1 | <Button android:stateListAnimator="@xml/animate_scale" |
View
API:
1 | translationX,translationY//相对父View |
示例:
创建动画,指定View属性即可
1 | ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f); |
Interpolator
AccelerateDecelerateInterpolator
1 |
|
LinearInterpolator
1 |
|
ViewPropertyAnimator
- 组合
ObjectAnimator
1 |
|
- 单个
ObjectAnimator
1 |
|
- ViewPropertyAnimator
1 |
|
xml定义
定义
AnimatorSet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<set android:ordering="sequentially">
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"/>
</set>引入
AnimatorSet
1 | AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, |
- 定义 Animator
1 | <animator xmlns:android="http://schemas.android.com/apk/res/android" |
- 引入
Animator
1 | ValueAnimator xmlAnimator = (ValueAnimator) AnimatorInflater.loadAnimator(this, |
物理动画
官方支持库support-dynamic-animation
gradle
依赖
1 | compile 'com.android.support:support-dynamic-animation:27.1.0' |
版本:
注:要求sdk最低版本 为16,编译版本27,功能可用情况下,可适当降低support版本及编译版本
api
- 接口
1 | DynamicAnimation.OnAnimationEndListener |
- 类
1 | DynamicAnimation<T extends DynamicAnimation<T>> |
使用
开源库
属性动画 3.0以下
注:已停止更新
gradle依赖
1 | compile 'com.nineoldandroids:library:2.4.0' |
jar 依赖
将jar包:nineoldandroids-2.4.0.jar
置于libs目录
使用
与官方属性动画api使用方式一致
加载动画
ZLoading
源码支持api 15及以上,14及以下需手动变更,功能无影响
gradle依赖
1 | compile 'com.zyao89:zloading:1.0.11' |
使用
- xml
1 | <com.zyao89.view.zloading.ZLoadingView |
- 代码:
ZLoadingView
1 | ZLoadingView zLoadingView = (ZLoadingView) findViewById(R.id.loadingView_1); |
- Dialog:
ZLoadingDialog
1 | ZLoadingDialog dialog = new ZLoadingDialog(MainActivity.this); |
支持的类型
1 | 类名 枚举类型 名称 |
效果
gif
airbnb-lottie-android
支持动画json文件解析,canvas绘制动画
gradle依赖
使用latest.integration依赖最新版本
1 | compile 'com.airbnb.android:lottie:latest.integration' |
使用
- xml
1 | <com.airbnb.lottie.LottieAnimationView |
- 代码
1 | LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view); |
android-gif-drawable
源码编译需ndk支持
Android studio 插件:
支持gif格式,最低支持api版本:14
gradle依赖
1 | compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.12' |
如果依赖失败,在项目 gradle内配置:
1 | buildscript { |
使用示例
- xml
ImageView
1 | <pl.droidsonroids.gif.GifImageView |
TextView
1 | <pl.droidsonroids.gif.GifTextView |
- 代码
GifImageViwe
, GifImageButton
,GifTextView
支持setImageResource(int resId)
,setBackgroundResource(int resId)
动态设置gif图片资源
GifDrawable
:
1 | //asset file |
gif控制
1 |
|
1 | getLoopCount()//循环次数 |
回调
MultiCallback
支持的功能:
recycle() 释放内存
isRecycled()
getError() 返回错误详细内容
1 | MultiCallback multiCallback = new MultiCallback(); |
物理-弹簧动画
已停止维护,依赖可用
Gradle依赖
1 | compile 'com.facebook.rebound:rebound:0.3.8' |
jar 依赖
将jar包:rebound-0.3.8.jar置于libs目录
API
类: SpringSystem
方法:create
监听:SpringListener ,SimpleSpringListener
回调方法:
onSpringUpdate
onSpringAtRest
onSpringActivate
onSpringEndStateChange
官方使用示例
1 | SpringSystem springSystem = SpringSystem.create(); |
属性-动画View Shaker
内置多种动画,支持链式调用
最近更新日期:2017/6
gradle依赖
1 | compile 'com.daimajia.easing:library:2.0@aar' |
API
枚举类型 Techniques,指定具体类型即可
with
palyOn(View target)
使用示例
1 | YoYo.with(Techniques.Tada) |
1 | YoYo.with(Techniques.Shake).playOn(targetView); |