【约束布局】ConstraintSet 约束集 ( 简介 | 约束属性集合 | 约束集初始化 | 约束集应用到布局中 | 关键帧动画 | TransitionManager 使用 )(一)

简介: 【约束布局】ConstraintSet 约束集 ( 简介 | 约束属性集合 | 约束集初始化 | 约束集应用到布局中 | 关键帧动画 | TransitionManager 使用 )(一)

I . ConstraintSet 约束集 简介


ConstraintSet 约束集 简介 :



① ConstraintSet 约束集 概念 : ConstraintSet 约束集 顾名思义 , 就是 约束属性的集合 , 其表示 约束布局 ( ConstraintLayout ) 中 所有的组件 的 约束条件 , 尺寸 , 边距 , 等 约束属性 ;


② 约束集 ConstraintSet 封装内容 : 约束集中封装了 每个组件 的所有 约束布局 属性 ;


③ 约束集应用效果 : 约束布局 ( ConstraintLayout ) 应用 约束集 ( ConstraintSet ) 时 , 约束布局中的所有组件都会按照约束集中的约束属性进行重新布局绘制 ;




II . ConstraintSet 约束集中封装的约束属性及操作 示例


1 . 获取约束集 : 从 约束布局 ( ConstraintLayout ) 中 , 可以获取 约束集 ( ConstraintSet ) , 约束集可以从当前现有组件中获取 , 也可以从布局文件中获取 , 下面代码是从布局文件中获取的 ;



//1 . 创建 约束集 对象
ConstraintSet mConstraintSet = new ConstraintSet();
//2 . 从布局文件中获取 约束集 对象
mConstraintSet.clone(context, R.layout.constraintlayout);



2 . 约束集中的约束属性 : R.layout.constraintlayout 布局就是如下代码 , 从下面的布局中获取 约束集 ConstraintSet , 该约束集中封装了 button1 , button2 这 2 22 个组件的 所有约束属性 , 如 android:layout_width , android:layout_height , 可以直接获取 , app:layout_constraintBottom_toBottomOf 等约束属性需要从 ConstraintLayout.LayoutParams 中获取 ;



<?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">
    <!-- 按钮组件 1 -->
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <!-- 按钮组件 2 -->
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World! Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button1"
        app:layout_constraintVertical_bias="0.2" />
</androidx.constraintlayout.widget.ConstraintLayout>



3 . 获取某组件的约束属性 : 约束集 ( ConstraintSet ) 目前只提供了设置某组件的 约束属性 , 无法获取组件的 约束属性 ;



4 . 设置某组件的约束属性 : 调用 setXxx(int viewId, 属性值类型 属性值) , 或 constrainXxx(int viewId, 属性值类型 属性值) , 等类型的方法 , 一般是第一个参数传入要修改的属性 ID , 第二个参数传入要修改的约束属性值 , 即可修改指定组件的指定约束属性 ;




III . ConstraintSet 约束集 初始化方法


1 . 从布局中拷贝 ConstraintSet 约束集 数据 :



① 从 约束布局文件 中拷贝约束集 : void clone(Context context, int constraintLayoutId) ;


② 从 约束布局 组件中拷贝约束集 : void clone(ConstraintLayout constraintLayout) ;


③ 从 约束集 中拷贝约束集 : void clone(Constraints constraints) ;


④ 从 约束 中拷贝约束集 : void clone(ConstraintSet set) ;



2 . 从 XML 资源文件中加载 约束集 ConstraintSet 数据 : 从 ConstraintLayout 布局文件 类型的 XML 资源中加载约束集数据 ;



① 从资源中加载 : void load(Context context, int resourceId) ;


② 从 Xml 解析器中加载 : void load(Context context, XmlPullParser parser) ;




IV . ConstraintSet 约束集 应用到 约束布局 ConstraintLayout 中


ConstraintSet 约束集 应用到 约束布局 ConstraintLayout 中 :



① 传统属性 与 约束属性 : 这里将属性分为 传统属性 ( Custom Attributes ) , 约束属性 , 约束属性是只有在 约束布局中使用的属性 , 其它的非约束属性就是传统属性 , 如 宽高 , 边距 , 位置 , 旋转 , 缩放 , 等所有布局类型通用的这些属性 ;


② 应用 约束集所有属性 : void applyTo(ConstraintLayout constraintLayout) ; 将所有的属性 , 传统属性 , 约束属性 , 都应用到约束布局中 ;


③ 应用 传统属性 : void applyCustomAttributes(ConstraintLayout constraintLayout) ; 只将传统属性应用到约束布局中 ;


④ 应用 约束布局属性 : void applyToLayoutParams(int id, ConstraintLayout.LayoutParams layoutParams) ; 为某个组件应用 约束布局属性 ;


⑤ 应用 约束属性 : void applyToWithoutCustom(ConstraintLayout constraintLayout) ; 将约束属性 ( 非传统属性 ) 应用到约束布局中 ;




V . ConstraintSet 关键帧动画


关键帧动画 :



① 核心方法 : 使用 TransitionManager.beginDelayedTransition ( final ViewGroup sceneRoot ) 方法生成并执行动画 ;


② 初始帧 与 目的帧 : 该方法 使用 默认的转换方式 , 创建一个动画 , 动画是基于一个场景 ViewGroup 进行生成的 , 初始场景是 初始帧 , 转换后的新场景是 目的帧 ;


③ 过渡帧 : TransitionManager 会自动生成中间的多个过渡帧 , 其中的 初始帧 和 目的帧 是关键帧 , 过渡帧 是根据两个关键帧之间的改变自动生成的 ,


④ 方法原型 :


/**
 * Convenience method to animate, using the default transition,
 * to a new scene defined by all changes within the given scene root between
 * calling this method and the next rendering frame.
 * Equivalent to calling {@link #beginDelayedTransition(ViewGroup, Transition)}
 * with a value of <code>null</code> for the <code>transition</code> parameter.
 *
 * @param sceneRoot The root of the View hierarchy to run the transition on.
 */
public static void beginDelayedTransition(final ViewGroup sceneRoot) {
    beginDelayedTransition(sceneRoot, null);




VI . ConstraintSet 关键帧动画 代码流程


关键帧动画流程 :



① 设置起始帧 : 准备 ViewGroup 组件 A AA , 作为关键帧动画的起始帧 , 只要获取到该组件即可 ;


② 设置关键帧动画 : 调用 TransitionManager.beginDelayedTransition ( ) 方法 , 生成过渡帧 , 执行时会自动进行关键帧动画执行 ;


③ 设置目的帧 : 设置 ViewGroup 组件 A AA 的变化结果 , 任何组件的 尺寸 位置 的 变化 , 都会以动画形式过渡转换过去 ;


目录
相关文章
|
6月前
|
存储 数据库 Python
视图函数中创建模型, 并设置外键
视图函数中创建模型, 并设置外键。
34 1
|
存储 搜索推荐 开发工具
怎么去约束代码的统一性
当你着手的项目随着协同人员的越来越多,始终会面临着一个问题,那就是代码的统一性,俗话说,千人千面,放在代码里,也是百家争鸣,毕竟每个人都有自己的思想,也有着自己书写代码的风格,如何让一个项目,朝着一个统一的风格前去,这个是很难的,难的不是规范的制定,而是规范的落实。
|
存储 关系型数据库 MySQL
第13章_约束
第13章_约束
132 0
30EasyUI 数据网格- 创建列组合
30EasyUI 数据网格- 创建列组合
30 0
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
911 0
|
数据可视化 开发者
使用VFL创建约束对象
使用VFL创建约束对象
111 0
|
关系型数据库 MySQL 索引
【MySQL8.0学习笔记】约束:主键约束、自增长约束、非空约束、唯一性约束、默认约束与零填充约束
文章目录 1 MySQL约束简介 2 主键约束 2.1 主键约束的操作 2.1.1 添加单列主键 2.1.2 添加多列联合主键 2.1.3 通过修改表结构的方式添加主键 2.1.4 删除主键 3 自增长约束 3.1 指定自增长字段的初始值 3.1.1 delete和truncate在删除后自增列的变化 4 非空约束 5 唯一约束 6 默认约束 7 零填充约束(zerofill)
【约束布局】ConstraintSet 约束集 ( 简介 | 约束属性集合 | 约束集初始化 | 约束集应用到布局中 | 关键帧动画 | TransitionManager 使用 )(二)
【约束布局】ConstraintSet 约束集 ( 简介 | 约束属性集合 | 约束集初始化 | 约束集应用到布局中 | 关键帧动画 | TransitionManager 使用 )(二)
461 0
【约束布局】ConstraintSet 约束集 ( 简介 | 约束属性集合 | 约束集初始化 | 约束集应用到布局中 | 关键帧动画 | TransitionManager 使用 )(二)
|
Android开发
【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )(二)
【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )(二)
540 0
【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )(二)
【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )(一)
【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )(一)
223 0
【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )(一)