android - 如何从屏幕底部到顶部为 ConstraintLayout 设置动画?

标签 android animation kotlin android-animation android-constraintlayout

我一直在寻找使用 ConstraintLayout 将对象从 A 点移动到 B 点的最简单方法,并能够更改其持续时间和加速速度。例如,将布局/ View 从屏幕底部移动到其预期位置,并在屏幕上设置约束。我无法找到如何使用 ConstraintLayout 处理对象。任何人都可以指出我正确的方向吗?谢谢。

最佳答案

将此 xml 作为内容 View :

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/constraint_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />

</android.support.constraint.ConstraintLayout>

还有这个在 Activity 中:

class SecondActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.item)

        val constraintLayout = findViewById(R.id.constraint_layout) as ConstraintLayout
        val button = findViewById(R.id.button)

        button.setOnClickListener {
            val constraintSet = ConstraintSet()
            constraintSet.clone(constraintLayout)
            constraintSet.setVerticalBias(R.id.button, 1.0f)
            constraintSet.setHorizontalBias(R.id.button, 1.0f)

            val transition = AutoTransition()
            transition.duration = 1500
            transition.interpolator = AccelerateDecelerateInterpolator()

            TransitionManager.beginDelayedTransition(constraintLayout, transition)
            constraintSet.applyTo(constraintLayout)
        }
    }
}

将产生以下输出:

enter image description here

this articlethis presentation了解更多详情。

关于android - 如何从屏幕底部到顶部为 ConstraintLayout 设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45250853/

相关文章:

android - 如何在样式中使用 textColorPrimary 作为背景色?

android - 动画结束后暂停

android - 启用 Exoplayer 缓存后 Glide 加载缓慢

安卓彩信广播接收器

android - 如何将菜单添加到布局

android - 如何同时使用 GCM 和 Urban Airship 进行 Android 推送通知

javascript - 仅当设置新帧时才将动画绘制到 Canvas 上?

animation - UINavigationBar 在 TransitionFromViewController 期间跳跃 20 像素

android - 如何在 Kotlin 中为 Fragment 类添加功能扩展?

spring - 使用 mapstruct 将嵌套的 DTO 对象映射到单个项目列表