ConstraintLayout2.0一篇写不完之约束到底写在哪

ConstraintLayout2.0一篇写不完之约束到底写在哪熟读约束三百遍,不会使用也会吹。 https://developer.android.com/reference/androidx/constraintlayout/motion/widget/Mot

熟读约束三百遍,不会使用也会吹。

developer.android.com/reference/a…

约束到底写在哪

MotionLayout的约束有几种写法,这个问题跟茴香豆的茴有几种写法还真不太一样。

在MotionLayout中,约束可以写在三个地方。

  • 直接写在MotionLayout中:如果布局简单,那么可以直接写在MotionLayout中,这样Scene中的约束会直接继承Layout。
  • 写在Scene中:这是官方推荐的做法,不同的State对应不同的ConstraintSet。
  • 写在单独的CL中:Transition的State不仅仅可以使用ConstraintSet,也可以使用单独的ConstraintLayout布局文件。

默认情况下,所有的约束都来自于Layout,这也是IDE中,默认显示的Source是Layout的原因。

这几种写法各有利弊,首先,写在MotionLayout中,会被State中的布局约束覆盖,但是写在Scene中,每个State都要重复写大量的约束,写在单独的CL布局中,则无法预览,所以,成年人的世界,就是要你全都会,结合不同的使用场景,需要用不同的约束策略。

Sectioned Constraints

前面说了,在Scene的ConstraintSet中,你需要对每个发生变化的元素创建Constraint,而且一旦你创建了这个元素的Constraint,那么Layout中的这个元素的所有约束都将失效,例如你修改了width,即使height没有修改,也需要重写。

Constraint位于ConstraintSet标签内部,用于描述当前的约束行为,你可以把它当作是一个简化的ConstraintLayout,可以在其内部创建约束,但更好的做法是通过layout、motion、transform等标签来对约束进行分类,从而可以更好的理清约束和动画的关系。

所以,当你不想重写所有属性的修改时,可以使用Sectioned Constraints,它有五个实现:

  • Layout:这里面你可以修改和布局相关的状态变更,例如布局约束和尺寸
  • Transform:这里你可以修改Transform相关的状态变更,例如rotation、translationX等
  • PropertySet:这里你可以修改View的属性,例如Visibility
  • Motion:这里你可以修改跟MotionLayout相关的属性,例如pathMotionArc、TransitionEasing等
  • CustomAttribute:这里你可以修改你设置的CustomAttribute

借助它们,可以少写无关的重复属性,简化代码。

Derived Constraints

ConstraintSet可以从另一个ConstraintSet中派生,这样可以优化约束的复用,利用deriveConstraintsFrom属性,你可以指定另一个ConstraintSet的id进行引用,然后在其中修改需要覆盖的属性。

ConstraintOverride

这个标签是2.1新增的一个属性,也存在于ConstraintSet标签下,于Constraint同级。它包含了Constraint所有的属性,除了layout_constraintXX_toXXOf之类提供锚点信息的属性。利用这个属性,可以很方便的针对某些非锚点信息的变化的属性进行修改。

Constraint Tags

Constraint的标签支持两种形式。

  • 所有的ConstraintLayout+下面列出的那些+

  • 组合标签:、、、、。使用这些标签的好处是,如果不存在这些属性,则从基本布局文件中获取。如果只需要一个Motion标签,这就可以省去复制所有的布局标签。如果使用了这些标签,那么基础文件中的所有布局属性都会被覆盖。

属性列表:

属性 含义
android:id Id of the View
[ConstraintLayout attributes] Any attribute that is part of ContraintLayout layout is allowed
[Standard View attributes] A collection of view attributes supported by the system (see below)
transitionEasing define an easing curve to be used when animating from this point (e.g. curve(1.0,0,0,1.0)) or key words {standard | accelerate | decelerate | linear }
pathMotionArc the path will move in arc (quarter eclipses) or key words {startVertical | startHorizontal | none }
transitionPathRotate (float) rotate object relative to path taken
drawPath draw the path the layout will animate animate
progress call method setProgress(float) on this view (used to talk to nested ConstraintLayouts etc.)
call a set”name” method via reflection
Attributes for the ConstraintLayout e.g. layout_constraintTop_toTopOf
currently only visibility, alpha, motionProgress,layout_constraintTag.
All the view transform API such as android:rotation.
Motion Layout control commands such as transitionEasing and pathMotionArc

Layout

属性 含义
[ConstraintLayout attributes] see for attribute

PropertySet

属性 含义
visibility set the Visibility of the view. One of Visible, invisible or gone
alpha setAlpha value
motionProgress using reflection call setProgress
layout_constraintTag a tagging string to identify the type of object

Transform

属性 含义
android:elevation base z depth of the view.
android:rotation rotation of the view, in degrees.
android:rotationX rotation of the view around the x axis, in degrees.
android:rotationY rotation of the view around the y axis, in degrees.
android:scaleX scale of the view in the x direction
android:scaleY scale of the view in the y direction.
android:translationX translation in x of the view. This value is added post-layout to the left property of the view, which is set by its layout.
android:translationY translation in y of the view. This value is added post-layout to the top property of the view, which is set by its layout
android:translationZ translation in z of the view. This value is added to its elevation.
app:transformPivotTarget transform target
android:transformPivotX transform pivot x
android:transformPivotY transform pivot y

Motion

属性 含义
transitionEasing Defines an acceleration curve.
pathMotionArc Says the object should move in a quarter ellipse unless the motion is vertical or horizontal
motionPathRotate set the rotation to the path of the object + this angle.
drawPath Debugging utility to draw the motion of the path
animateCircleAngleTo Animate with circle
animateRelativeTo Animate relative to target
quantizeMotionSteps quantize animation with steps

CustomAttribute

属性 含义
attributeName The name of the attribute. Case sensitive. ( MyAttr will look for method setMyAttr(…)
customColorValue The value is a color looking setMyAttr(int )
customIntegerValue The value is an integer looking setMyAttr(int )
customFloatValue The value is a float looking setMyAttr(float )
customStringValue The value is a String looking setMyAttr(String )
customDimension The value is a dimension looking setMyAttr(float )
customBoolean The value is true or false looking setMyAttr(boolean )

向大家推荐下我的网站 xuyisheng.top/ 专注 Android-Kotlin-Flutter 欢迎大家访问

ConstraintLayout2.0一篇写不完之约束到底写在哪

今天的文章ConstraintLayout2.0一篇写不完之约束到底写在哪分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20047.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注