由于产品需求,需要呈现出一个listView中item的翻转动画。于是便开始接触实现动画效果。
先来说说想要实现的效果:
1.在item中,点击按钮进行动画翻转。
2.翻转过程:指定view沿X轴进行向上翻转90°消失,指定view继续向上翻转90°显示。(归纳为:一个view翻转180°后显示另外一个view)
实现方案:使用属性动画。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public static void FlipAnimatorXViewShow(final View oldView, final View newView, final long time) { ObjectAnimator animator1 = ObjectAnimator.ofFloat(oldView, "rotationX", 0, 90); final ObjectAnimator animator2 = ObjectAnimator.ofFloat(newView, "rotationX", -90, 0); animator1.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { oldView.setVisibility(View.GONE); animator2.setDuration(time).start(); newView.setVisibility(View.VISIBLE); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); animator1.setDuration(time).start(); }
|
本以为自己写的没有问题(其实确实没问题),但是由于是用在listview中,每当数据一刷新,需要显示新的数据,并且需要还原到oldView的内容。于是,我便只在数据刷新重新绘制界面时,让oldView.setVisibility(View.VISIBLE)。却在demo中的显示效果并不理想,oldView中并不是显示之前的内容。
根本原因:原因在于oldView向上翻转动画90°结束后,将oldView的RotationX属性设置为了90,此时oldView的视图仅仅只是条线段。所以,根本不会显示之前的内容数据。
解决方案:只需要在动画结束时,将oldView的RotationX属性设置回0就可以了。
1 2
| oldView.setRotationX(0);//这行代码要求在api level在11以上 ViewCompat.setRotationX(oldView, 0);//因此想要兼容11一下的版本,使用v4包中的ViewCompat
|

作者 :
Lian Yuchen(ShadowHappiness)
著作权归作者所有,转载请联系作者获得授权。