可见性更改在 CoordinatorLayout 上起作用,但现在在更改为约束布局时不起作用

Visibility changes worked on CoordinatorLayout but now they don't when changing to Constraint Layout

当某些内容加载完成时,我实现了进度条可见性从可见变为不可见的变化。当父视图是协调器布局时,它工作正常。现在我把它切换到 Constraint Layout 突然它不再工作了。

此更改是通过侦听点击的界面以编程方式完成的。当在片段内完成点击时,回调会在 activity 中设置可见性 off/on。之前很好用,现在不行了。

代码基本上是这样的:在我的片段 interface?.progressBarOff() 和我的 activity

override fun progressBarOff() {
    progressbar.visibility = View.INVISIBLE // this line is getting called. so no problems with the interface
}

progressBarOn() 方法与此类似。

我试过了:

  1. runOnUiThread 什么都不做
  2. 我的 activity 的 onCreate 内的能见度发生了变化。但是,当从界面更改可见性时,它被调用但什么都不做。如果我在 onCreate 内将可见性设置为 VISIBLE,它将保持可见但无法更改。
  3. view.visibility = ConstraintLayout.VISIBLE 效果不佳。
  4. view.visibility = View.GONE 效果不佳。

我在网上查找有关它为何不起作用的答案,有人说它与 Groups 有关,但我还没有使用过群组。

MAIN_ACTIVITY.XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blackBackground"
    android:nestedScrollingEnabled="false"
    app:layoutDescription="@xml/activity_main_scene"
    app:motionDebug="SHOW_ALL">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/player_background"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#000000"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <FrameLayout
        android:id="@+id/main_player"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="@id/player_background"
        app:layout_constraintTop_toTopOf="@id/player_background" />

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/main_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:elevation="4dp"
        android:theme="@style/TransparentActionBar"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:popupTheme="@style/BlackActionBarPopUp" />

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintTop_toBottomOf="@id/player_background"
        app:navGraph="@navigation/mobile_navigation" />

    <ProgressBar // THIS PROGRESS BAR
        android:id="@+id/main_progressbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_gravity="bottom"
        android:background="@drawable/navbar_background"
        app:itemIconTint="@drawable/navbar_colors"
        app:itemTextColor="@drawable/navbar_colors"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:menu="@menu/bottom_nav_menu" />


</androidx.constraintlayout.motion.widget.MotionLayout>

解决方案

由于我使用的是 Motion Layout,因此我不得不求助于使用另一个 Transition 来实现此效果。

<ConstraintSet android:id="@+id/progressbarOn">
    <Constraint
        android:id="@id/main_progressbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible" />
</ConstraintSet>

<ConstraintSet android:id="@+id/progressbarOff">
    <Constraint
        android:id="@id/main_progressbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible" />
</ConstraintSet>

<Transition
    android:id="@+id/progressbar"
    app:constraintSetEnd="@id/progressbarOff"
    app:constraintSetStart="@id/progressbarOn"
    app:duration="0" />

每当我想打开或关闭进度条时,我只需输入:

view.setTransition(R.id.progressbar)
view.transitionToStart() // sets visibility ON

view.setTransition(R.id.progressbar)
view.transitionToEnd() // sets visibility OFF

我当前的动画没有出现任何错误或任何其他错误。