父约束下方的Android约束布局位置视图

时间:2018-02-19 03:33:08

标签: android animation android-constraintlayout

我想"滑入"使用约束集和过渡管理器在Constraint布局中查看动画。为此,我需要将我的视图放在父视图下面。因此它将从屏幕滑出并向后滑动屏幕。在Constraint Layout中可以吗?

在代码中,我需要在父视图下方的index_navigation位置。

<TextView
    android:id="@+id/page_number"
    style="@style/RoundBackgroundStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="5dp"
    android:background="@drawable/page_number_round_bg"
    android:textColor="#fff"
    android:visibility="visible"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    />

<me.example.ui.extensions.PageNavigator
    android:id="@+id/index_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/index_scroll_background"
    android:clickable="true"
    android:focusable="true"
    app:layout_constraintBottom_toBottomOf="parent"
    >

    <TextView
        android:id="@+id/index_navigation_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:textColor="@color/colorPrimaryLight"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        />
</me.example.ui.extensions.PageNavigator>

动画代码

val constraintSet1 = ConstraintSet()
        constraintSet1.clone(rootView)
        val constraintSet2 = ConstraintSet()
        constraintSet2.clone(this, R.layout.activity_main)
        constraintSet2.setTranslationY(R.id.index_navigation, 150f)

        viewModel.shouldShowIndexPagerLiveEvent.observe(this, Observer { shouldShow ->
            shouldShow?.let {
                TransitionManager.beginDelayedTransition(rootView)
                val constraint = if (it) constraintSet1 else constraintSet2
                constraint.applyTo(rootView)
            }
        })

2 个答案:

答案 0 :(得分:0)

您是否尝试过设置index_navigation的位置?这样的事情。

index_navigation_view.setY(parent_view_height)

答案 1 :(得分:0)

我看到您已经找到了答案,但是我想我会提出另一个存在的可能性,那就是使用MotionLayout(这是ConstraintLayout的扩展),可用于API 18及更高版本。

这是开发人员教程的link