Android用動畫顯示或隱藏視圖

一、需求背景

有時候,我們需要在屏幕上顯示新的信息,同時移除舊的信息,一般情況下我們通過VISIBILITY或者GONE來對需要顯示或者隱藏的視圖進行設置,這樣做的壞處是顯示或者隱藏的動作變化非常突兀,而且有時候變化很快導致用戶無法註意到這些變化。這時就可以使用動畫顯示或者隱藏視圖,通常情況下使用圓形揭露動畫,淡入淡出動畫或者卡片反轉動畫。

二、創建淡入淡出動畫

淡入淡出動畫會逐漸淡出一個View或者ViewGroup,同時淡入另一個。此動畫適合在應用中切換內容或者視圖的情況。這裡使用ViewPropertyAnimator來創建這種動畫。

下面的動畫是從進度指示器切換到某些內容文字的淡入淡出示例。

1.創建佈局文件

<androidx.constraintlayout.widget.ConstraintLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content">

      <!--淡入淡出動畫-->
      <Button
              android:id="@+id/btn_use_fade_in_fade_out_animator"
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_marginHorizontal="10dp"
              android:onClick="doClick"
              android:text="@string/use_fade_in_fade_out_animator"
              app:layout_constraintLeft_toLeftOf="parent"
              app:layout_constraintRight_toRightOf="parent"
              app:layout_constraintTop_toTopOf="parent" />

      <androidx.constraintlayout.widget.ConstraintLayout
              android:layout_width="0dp"
              android:layout_height="0dp"
              app:layout_constraintDimensionRatio="w,1:1"
              app:layout_constraintLeft_toLeftOf="parent"
              app:layout_constraintRight_toRightOf="parent"
              app:layout_constraintTop_toBottomOf="@id/btn_use_fade_in_fade_out_animator">

          <TextView
                  android:id="@+id/tv_content"
                  android:layout_width="0dp"
                  android:layout_height="0dp"
                  android:padding="16dp"
                  android:text="@string/test_use_fade_in_fade_out_animator_text"
                  android:visibility="gone"
                  app:layout_constraintBottom_toBottomOf="parent"
                  app:layout_constraintLeft_toLeftOf="parent"
                  app:layout_constraintRight_toRightOf="parent"
                  app:layout_constraintTop_toTopOf="parent" />

          <!--進度條-->
          <ProgressBar
                  android:id="@+id/loading_progress"
                  style="?android:progressBarStyleLarge"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  app:layout_constraintBottom_toBottomOf="parent"
                  app:layout_constraintLeft_toLeftOf="parent"
                  app:layout_constraintRight_toRightOf="parent"
                  app:layout_constraintTop_toTopOf="parent" />

      </androidx.constraintlayout.widget.ConstraintLayout>


  </androidx.constraintlayout.widget.ConstraintLayout>

2.設置淡入淡出動畫

對於需要淡入的動畫,首先將其可見性設置為GONE,這一點在佈局文件中已經設置。在需要顯示淡入的View的時候,首先將其alpha設置為0,這樣可以保證View已經顯示但是不可見。分別設置淡入的動畫和淡出的動畫,淡入的動畫將其所在的View的alpha屬性從0變化到1,淡出的動畫將其所在的View的alpha屬性從1變化到0對於淡出動畫,在動畫執行完成後,將其的可見性設置為GONE,從而加快處理速度。

3.代碼實現

//開始執行淡入淡出動畫
    private fun crossFade() {
        //設置需要淡入的View的alpha為0,可見性為VISIBLE
        mBinding.tvContent.apply {
            alpha = 0f
            visibility = View.VISIBLE
            //通過動畫將透明度變為1.0
            animate()
                .alpha(1.0f)
                .setDuration(mShortAnimationDuration.toLong())
                .start()
        }

        //設置需要淡出的動畫,將其alpha從1變為0,並通過監聽動畫執行事件,在動畫結束後將View的可見性設置為GONE
        mBinding.loadingProgress.animate()
            .alpha(0f)
            .setDuration(mShortAnimationDuration.toLong())
            .setListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator?) {
                    super.onAnimationEnd(animation)
                    mBinding.loadingProgress.visibility = View.GONE
                }
            })
            .start()
    }

總結

到此這篇關於Android用動畫顯示或隱藏視圖的文章就介紹到這瞭,更多相關Android動畫內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: