今天想對一個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上面的所以沒有效果
最終選擇是第四種,畢竟簡單而且效果與我想要的相符
僅此