最近研究动画时,发现一个比较好用的一个设置动画的ViewAnimator,感觉挺是实用的,记录下:
在build.gradle中加入:
compile 'com.github.florent37:viewanimator:1.0.5'
简单的一些用法:
1.一个方法多个视图动画:
ViewAnimator
.animate(image)//第一个动画
.translationY(-1000, 0)//Y轴方向移动
.alpha(0,1)//透明图
.andAnimate(text)//加入第2个视图的动画
.dp().translationX(-20, 0)//X轴方向移动-20dp,然后回到原来的位置
.decelerate()//减速
.duration(2000)//动画持续时间
.thenAnimate(image)
.scale(1f, 0.5f, 1f)//从1缩小至0.5再放大至1
.accelerate()//加速
.duration(1000)
.start();
效果图:
如果不用ViewAnimator,使用最原始的动画属性设置,代码带长:
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(
ObjectAnimator.ofFloat(image,"translationY",-1000,0),
ObjectAnimator.ofFloat(image,"alpha",0,1),
ObjectAnimator.ofFloat(text,"translationX",-200,0)
);
animatorSet.setInterpolator(new DescelerateInterpolator());
animatorSet.setDuration(2000);
animatorSet.addListener(new AnimatorListenerAdapter(){
@Override public void onAnimationEnd(Animator animation) {
AnimatorSet animatorSet2 = new AnimatorSet();
animatorSet2.playTogether(
ObjectAnimator.ofFloat(image,"scaleX", 1f, 0.5f, 1f),
ObjectAnimator.ofFloat(image,"scaleY", 1f, 0.5f, 1f)
);
animatorSet2.setInterpolator(new AccelerateInterpolator());
animatorSet2.setDuration(1000);
animatorSet2.start();
}
});
animatorSet.start();
2.多个视图添加相同的动画:
ViewAnimator
.animate(image,text)
.scale(0,1)
.start();
3.添加监听:
ViewAnimator
.animate(image)
.scale(0,1)
.onStart(() -> {})//动画开始监听
.onStop(() -> {})//动画结束监听
.start();
4.设置宽高:
ViewAnimator
.animate(view)
.waitForHeight() //wait until a ViewTreeObserver notification
.dp().width(100,200)
.dp().height(50,100)
.start();
5.设置颜色:
ViewAnimator
.animate(view)
.textColor(Color.BLACK,Color.GREEN)
.backgroundColor(Color.WHITE,Color.BLACK)
.start();
6.设置旋转动画:
ViewAnimator
.animate(view)
.rotation(360)
.start();
7.自定义动画:
ViewAnimator
.animate(text)
.custom(new AnimationListener.Update() {
@Override public void update(TextView view, float value) {
view.setText(String.format("%.02f",value));
}
}, 0, 1)
.start();
8.动画取消:
ViewAnimator viewAnimator = ViewAnimator
.animate(view)
.rotation(360)
.start();
viewAnimator.cancel();
9.还有很多的动画属性,如下效果图:
详细可见,github地址:https://github.com/florent37/ViewAnimator