今天想对一个LinearLayout里面的另外一个LinearLayout setVisibility的时候展示出动画效果
然后就开始思索实现方式,想到的方式
一、直接对目标View增加动画效果
例如:(使用View.setAnimation(Animation):https://www.cnblogs.com/whoislcj/p/5802899.html)
Animation daoHang = AnimationUtils.loadAnimation(mActivity,R.anim.bottom_dialog_out); daoHang.setDuration(240); linearLayout_daohang.setVisibility(View.VISIBLE); linearLayout_daohang.setAnimation(daoHang);
二、对目标View周围的View增加动画效果
例如(使用View.animate():https://www.cnblogs.com/dasusu/p/8647702.html)
viewPager.animate().setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { linearLayout_daohang.setVisibility(View.VISIBLE); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); viewPager.animate().translationY(linearLayout_daohang.getHeight()).setDuration(240).start();
三、通过对父组件添加子View的增加与删除的动画效果(这边是显示隐藏不是增加删除所以无效)
例如:(https://blog.csdn.net/cjh_android/article/details/51537045) LayoutTransition layoutTransition = new LayoutTransition(); layoutTransition.setAnimator(LayoutTransition.CHANGE_APPEARING,layoutTransition.getAnimator(LayoutTransition.CHANGE_APPEARING)); layoutTransition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,layoutTransition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING)); linearLayout1.setLayoutTransition(layoutTransition);
四、通过父组件布局文件中的属性来添加子组件的动画效果(https://blog.csdn.net/YllP_1230/article/details/86140691)
直接在父组件布局文件中android:animateLayoutChanges="true"添加这个属性并设为有则可以了
处理过程中,方法一虽然添加了动画效果,但是目标View周围的View没加上动画效果显得蛮突兀的
方法二是在方法一试验过程中发现的,实际上不需要对目标组件添加动画效果也可以达到类似
但是其中有一个问题,添加的动画效果是位移效果,然后展示目标View后,添加动画效果的View因为位移过导致与想要显示
的布局不符
第三个方法则因为这个方式的效果是用在AddView上面的所以没有效果
最终选择是第四种,毕竟简单而且效果与我想要的相符
仅此