Android 属性动画实战
什么是属性动画?
属性动画可以通过直接更改View
的属性来实现View
动画。例如:
- 通过不断的更改
View
的坐标来实现让View
移动的效果; - 通过不断的更改
View
的背景来实现让View
的背景渐变的效果; - 通过不断的更改
View
的宽高来实现让View
变形的效果; - …
由此可见,利用属性动画几乎可以处理任何的涉及到View
的动画效果。
实战
具体的细节就不多说了,网上相应的教程也不少。这篇博客主要是来实现类似于美团外卖购物车的效果。
分析
首先分析购物车动画具体的细节:在滑动过程中,“购物车”向右移动,直至一半隐藏到右侧;在手指停留在屏幕中时,“购物车”还隐藏在右侧;当手指离开屏幕,“购物车”在一定时间后重新移动回来。
以上的动画细节可以分析出和RecycleView
的滚动事件息息相关,因此动画就应该在RecycleView
的滚动事件中实现。
实现基本布局
上图的蓝色图片既是我们要处理的View
。
给RecycleView加上滚动事件
接下来给RecycleView
加上滚动事件,滑动或者飞翔时图片消失,当停止滑动时图片显示。
// 给rv加上滚动事件
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
switch (newState) {
case RecyclerView.SCROLL_STATE_DRAGGING:// 滚动中
case RecyclerView.SCROLL_STATE_SETTLING:// 飞翔中
iv.setVisibility(View.GONE);
break;
case RecyclerView.SCROLL_STATE_IDLE:// 停止滚动
iv.setVisibility(View.VISIBLE);
break;
}
}
});
效果图:
实现消失的动画
根据上面的图可以发现触发时机基本是没问题了,接下来要做的是让消失不突兀,加上消失的动画。
消失的实质是View
的x
坐标从当前位置一直往右直到变为隐藏了一半,下面让我们来实现这个效果:
// 消失动画的基本属性(从iv当前的x坐标一直到出了屏幕右侧一半)
disappearAnimator = ValueAnimator.ofFloat(iv.getX(), (float) (Utils.getScreenWidth(this) - iv.getWidth() / 2.0));
disappearAnimator.setDuration(400);// 动画持续时间
disappearAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// Value更新事件
float curValue = (float) animation.getAnimatedValue();
iv.setX(curValue);
}
})