VII . ConstraintSet 关键帧动画 支持的属性
关键帧动画支持的属性 :
① 不适配所有属性 : 不是所有的属性都适用于关键帧动画 ;
② 适配属性 : 组件的 尺寸 , 位置 , 旋转 , 缩放 , 等属性 , 可以使用关键帧动画生成过渡帧 ;
③ 不适配属性 : 组件的 颜色 , 透明度 , 等属性 , 无法使用关键帧动画生成过渡帧 ;
VIII . ConstraintSet 关键帧动画 示例代码
1 . 开始帧 布局文件 :
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:id="@+id/constraintLayout" android:onClick="onClick"> <Button android:id="@+id/button" android:layout_width="100dp" android:layout_height="100dp" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintHorizontal_bias="0" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0"/> </androidx.constraintlayout.widget.ConstraintLayout>
2 . 目的帧 布局文件 : 两帧的区别是 按钮的 位置 , 大小 , 角度 发生了改变 ;
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:id="@+id/constraintLayout"> <Button android:id="@+id/button" android:layout_width="200dp" android:layout_height="200dp" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintHorizontal_bias="1" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="1" android:rotation="210"/> </androidx.constraintlayout.widget.ConstraintLayout>
3 . Activity 代码 :
package kim.hsl.cckfa; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; import android.os.Bundle; import android.transition.TransitionManager; import android.view.View; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * 点击触发 关键帧动画 * @param view */ public void onClick(View view){ //1 . 获取 约束布局 组件 ( 设置 关键帧动画的 开始帧 ) ConstraintLayout constraintLayout = findViewById(R.id.constraintLayout); //2 . 创建 约束集 对象 ConstraintSet constraintSet = new ConstraintSet(); //3 . 从 约束布局 中加载约束集 constraintSet.load(this, R.layout.activity_main2); //4 . 设置 关键帧动画 TransitionManager.beginDelayedTransition(constraintLayout); //5 . 在 约束布局 中 , 应用约束集属性 ( 设置 关键帧动画的 结束帧 ) constraintSet.applyTo(constraintLayout); } }
4 . 关键帧动画效果 :
示例代码地址 : GitHub - ConstraintLayout_ConstraintSet_Key_Frame_Animation ;