首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在MotionLayout中水平对齐两个TextViews

,可以通过以下步骤实现:

  1. 首先,确保你的项目中已经引入了MotionLayout库。可以在项目的build.gradle文件中添加以下依赖:
代码语言:txt
复制
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
  1. 在布局文件中,使用MotionLayout作为根布局,并添加两个TextViews。例如:
代码语言:txt
复制
<androidx.constraintlayout.motion.widget.MotionLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView 1"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView 2"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.motion.widget.MotionLayout>
  1. 在MotionLayout中添加一个ConstraintSet,用于定义动画的起始和结束状态。在这个例子中,我们需要水平对齐两个TextViews,所以需要在起始和结束状态中设置相同的水平约束。例如:
代码语言:txt
复制
<androidx.constraintlayout.motion.widget.MotionScene xmlns:motion="http://schemas.android.com/apk/res-auto">
    <Transition
        motion:constraintSetEnd="@id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="1000">

        <KeyFrameSet>
            <KeyAttribute
                motion:framePosition="0"
                motion:motionTarget="@id/textView1"
                motion:transitionEasing="easeInOutQuad"
                motion:curveFit="linear">
                <CustomAttribute
                    motion:attributeName="layout_constraintEnd_toEndOf"
                    motion:customFloatValue="0" />
            </KeyAttribute>
            <KeyAttribute
                motion:framePosition="100"
                motion:motionTarget="@id/textView1"
                motion:transitionEasing="easeInOutQuad"
                motion:curveFit="linear">
                <CustomAttribute
                    motion:attributeName="layout_constraintEnd_toEndOf"
                    motion:customFloatValue="1" />
            </KeyAttribute>
        </KeyFrameSet>

        <KeyFrameSet>
            <KeyAttribute
                motion:framePosition="0"
                motion:motionTarget="@id/textView2"
                motion:transitionEasing="easeInOutQuad"
                motion:curveFit="linear">
                <CustomAttribute
                    motion:attributeName="layout_constraintStart_toStartOf"
                    motion:customFloatValue="1" />
            </KeyAttribute>
            <KeyAttribute
                motion:framePosition="100"
                motion:motionTarget="@id/textView2"
                motion:transitionEasing="easeInOutQuad"
                motion:curveFit="linear">
                <CustomAttribute
                    motion:attributeName="layout_constraintStart_toStartOf"
                    motion:customFloatValue="0" />
            </KeyAttribute>
        </KeyFrameSet>

    </Transition>

    <ConstraintSet android:id="@+id/start">
        <Constraint
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            motion:layout_constraintStart_toStartOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />

        <Constraint
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />
    </ConstraintSet>

    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />

        <Constraint
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            motion:layout_constraintStart_toStartOf="parent"
            motion:layout_constraintTop_toTopOf="parent" />
    </ConstraintSet>
</androidx.constraintlayout.motion.widget.MotionScene>

在上述代码中,我们定义了一个Transition,其中包含两个KeyFrameSet,分别对应两个TextViews的起始和结束状态。在起始状态中,第一个TextView的水平约束为layout_constraintStart_toStartOf="parent",第二个TextView的水平约束为layout_constraintEnd_toEndOf="parent"。在结束状态中,两个TextViews的水平约束互换。

  1. 在Activity或Fragment中,将MotionLayout作为布局的根元素,并设置MotionScene。例如:
代码语言:txt
复制
val motionLayout = findViewById<MotionLayout>(R.id.motionLayout)
motionLayout.setTransition(R.id.transition)

这样,当你运行应用时,两个TextViews将会在MotionLayout中水平对齐,并且可以通过动画进行过渡。

对于这个问题,腾讯云的相关产品和产品介绍链接地址如下:

  • 腾讯云产品:云原生应用引擎
  • 产品介绍链接地址:https://cloud.tencent.com/product/tekton

腾讯云原生应用引擎(Tencent Kubernetes Engine,TKE)是腾讯云提供的一种高度可扩展的容器化应用管理服务。它基于Kubernetes开源项目,提供了一站式的容器化解决方案,帮助用户快速构建、部署和管理容器化应用。TKE具有高可用、高性能、高安全性的特点,适用于各种规模的应用场景。

希望以上信息能对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

标签打印软件如何快速对齐标签内容

标签打印软件制作标签的时候,有的时候标签内容比较多,文字长短不一,如果不好好排版的话,会感觉很乱,为了标签的美观,标签打印软件添加完需要的文字之后,可以选择我们想要排版的文字,点击软件对齐按钮...具体操作如下: 1.打开标签打印软件,新建标签之后,点击软件左侧的”实心A”按钮,画布上绘制一个普通文本对象,双击普通文本,图形属性-数据源,点击”修改”按钮,在下面的状态框,手动输入你要的信息...我们可以选中标签上的对象,点击“查看-对齐”设置对齐方式,也可以点击软件上方工具栏对齐按钮,如:左对齐、右对齐、顶对齐、底对齐、垂直居中对齐水平居中对齐水平等间距、垂直等间距等,这里可以根据自己的需求自定义设置对齐方式为左对齐...如下图: 文字内容对齐之后,如果感觉垂直间隔比较大的时候,也可以再选中所有的文字,点击软件上方工具栏的 垂直等间距按钮,设置一下垂直间隔。...设置好之后,可以根据自己的需求,标签上添加其他的内容。设置文字对齐的方法如上。 以上就是有关快速对齐标签内容的操作步骤,想要了解更多标签打印软件的相应教程,可以到标签打印软件官网查询。

4K10
  • 水晶报表文本web无法两端对齐

    Web上利用水晶报表显示一段文本,用的是动态加载rpt的方法,结果出来的文本效果如下:         右边很不齐,于是回到水晶报表10程序调rpt,很快,把文本的对齐方式设为两端对齐就好了...接着,试着直接导入rpt,结果发现居然不能设置两端对齐,——根本就没有两端对齐vs .net环境里面,即使强制把两端对齐按钮添上工具栏,也是灰的。        ...很难得到字段的引用,最后终于搞定,我对cr的对象结构也有了一点点的进一步了解:         水晶报表.Net,主要的命名空间,一个是CrystalDecisions.CrystalReports.Engine...最后,还是命名空间CrystalDecisions.CrystalReports.Engine乱看,看到FieldObject,顺藤摸瓜,才算找到,原来是这样的:报表由很多的ReportObject...才觉悟过来:问题并不出在报表上,而是在于网页的显示方式的限制,两端对齐的方式下,查看显示的网页,可以看到:         原来它也只是利用CSS来进行两端对齐的。

    2.4K90

    WPF UNO 测试固定尺寸且水平和垂直对齐设置 Stretch 的元素容器内的布局行为

    本文将告诉大家我对 WPF 的自定义布局容器和自定义控件进行的布局行为测试的一个小点,即测试固定元素的尺寸的情况下或元素尺寸为有限尺寸的情况下,同步设置元素的水平和垂直对齐为 Stretch 来测试元素容器内的布局行为...,设置了水平和垂直对齐为 Stretch 的元素会如何布局 给以上的这个自定义容器插入一个元素,设置元素给定尺寸且设置了水平和垂直对齐,如下面代码 var grid = new Grid...,和测试布局尺寸空间小于元素所需尺寸时的压缩元素裁剪行为 对 WPF 和跑 WPF 框架之上的 UNO 框架的测试行为都符合下图 根据上图可以知道,当上层容器给定元素的可布局尺寸大于元素所需尺寸时,...当上层容器给定元素的可布局尺寸小于元素所需尺寸时,元素行为将和左上对齐时相同 本文以上代码放在github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行...cd 命令进入此空文件夹,命令行里面输入以下代码,即可获取到本文的代码 git init git remote add origin https://gitee.com/lindexi/lindexi_gd.git

    18210

    【翻译】MotionLayout实现折叠工具栏(Part 1)

    本系列教程,我会讲解如何使用 MotionLayout 来创建一个我们已经非常熟悉的动画行为:一个折叠工具栏动画( a Collapsing Toolbar )。...当然实际 App 开发过程我应该会使用 AppBarLayout 布局配合 Toolbar 控件吧。 如果在设计视图中查看这个布局,我们能看到布局所展示的工具栏处于展开的状态: ?...元素 OnSwipe 把过渡动画和用户 RecyclerView 上的拖拽操作绑定到了一起,也就是之前我们查看到的主布局的列表。...折叠状态下它会垂直居中,而在展开状态下它会对齐底部,因此 TextView 会更多的相对于 ImageView 的大小尺寸来进行相关设定。...这里卖个关子,本系列文章的最后,我们将会介绍关于 MotionLayout 布局更细粒度的一些控制。 三、总结 本篇的源代码请移步这里。 © 2018 , Mark Allison 。

    1.9K31

    静若处子动若脱兔-Constraintlayout2.0一探究竟

    和非AndroidX两个版本,最低支持API14,即Android4.0。...d60f65f6b8eb6e6b2a2271c588503df3 ConstrainLayout与MotionLayout的主要不同点是,MotionLayout将过渡动画的描述文件放置另一个xml文件...而在独立的xml文件,描述约束的变化,这个独立的xml就是MotionScene文件,它独立res/xml文件夹下,一个MotionLayout均对应一个MotionScene。...要注意的是,Arc Motion的设置必须建立Target对象有水平竖直位移的基础上,否则是没有Arc效果的。 下面这个例子演示了Arc Motion最简单的使用。...UI与动画进行了分离,MotionLayout将所有的动画逻辑放在了Scene,跟最早Android布局的写法,将UI和代码进行分离的方式类似,但这种方式现在的开发模式下,并不是很直观,因为MotionLayout

    1.1K10

    ConstraintLayout2.0一篇写不完之Carousel

    概念:轮播如何MotionLayout工作 假设我们要构建一个简单的水平轮播视图,并放大一个居中视图: 我们的基本布局包含几个视图,代表了我们的轮播项目: 通过MotionLayout创建具有三个状态的...next状态,需要相反的情况发生,与B,C,D,E移动到其中A,B,C,D分别为和的观点从从右向左移动。 至关重要的是,start状态必须恰好位于原始视图的起始状态。...下图显示了这种机制(请注意“ item#”值): 转场Transitions ConstraintSet定义的这三个状态,start和next,以及start和previous之间创建两个Transitions...Carousel Helper还需要设置几个属性: app:carousel_firstView:表示轮播的第一个元素的视图,我们的示例为C,即首先展示默认居中的视图 app:carousel_previousState...:Transitionstart->previous之间应用的ID app:carousel_forwardTransition:Transitionstart->next之间应用的ID 例如,您的布局

    1.4K20

    Gaussian16同时扫描两个反应坐标

    本公众号之前推送过高斯的两种常见势能面扫描: 用高斯做势能面扫描(一):刚性扫描 用高斯做势能面扫描(二):柔性扫描 可能大家都熟知,柔性扫描如果写了两个扫描坐标,如 B 1 5 S 7 0.1...然而有时候我们只想同时扫描两个反应坐标,即两个坐标同时改变,得到一条曲线。...(2)若仅算一两步反应,那么就手动GaussView里调整好两个键长,每次算完下载下来再调键长,这样扫描5个点就要下载、调整5次,甚是麻烦。...在这个反应中有两个主反应坐标(C−O键和O−H键)同时动,单独去扫描C−O键或者O−H键能量都会一直升高,并不会有突跃点。...为防止混淆,短横线−符号左边始终表示甲醛分子的原子,符号右边则表示水分子的原子。

    3K40

    NSA两个RSA加密产品植入了后门

    根据路透社的独家报道,NSA 安全行业领导企业RSA的两个加密产品都植入了随机数生成器后门,而不只是此前斯诺登爆料的一个。...2013年12月路透社曾爆料称著名加密产品开发商RSA收取NSA上千万美元后,在其软件Bsafe嵌入了NSA开发的,被植入后门的伪随机数生成算法(Dual_EC——DRBG,双椭圆曲线确定性随机比特生成器...第一个RSA算法后门曝光后,RSA立刻出面否认是该事件的同谋者,声称自己也是受害者。...但是路透社的报道指出,除了众所周知的Dual EC_DRBG双椭圆曲线确定性随机比特生成器外,NSA还在另一个RSA加密产品——Extended Random协议植入了后门,这个前NSA技术总监参与开发的安全工具事实上大大降低了...NSAExtended Random协议的开发上扮演着重要角色,协议作者之一的Margaret Salter当时是NSA的一位技术总监,目前Mozilla工作,他和Mozilla 都拒绝发表评论。

    1.9K30

    MotionLayout 使用介绍 (第一章)

    它拥有综合属性动画TransitionManager,和CoordinatorLayout的功能 使用MotionLayout你可以像TransitionManager一样通过两个布局文件描述布局的过渡动画...ConstraintSets 通常ConstrainSet将所有游戏布局文件的所有的位置信息规则; 你可以使用多个ConstrainSet,你可以决定将那些规则应用到布局应用时这些查看不会被重建...MotionScene MotionLayout的规范保存在一个单独的MotionSceneXML文件,文件该存储res / xml目录。...OnSwipe scene_01.xml文件我们Transition设置了OnSwipe处理器。处理器通过匹配用户的输入事件控制转换。...> MotionScene文件中有明显的区别,Transition的设置相同,但是我们把Start和结束直接定义了XML文件

    4.2K00

    可折叠设备的桌面模式

    MotionLayout 结合了父类的灵活性,同时又具备视图从一种姿态过渡到另一种时展示流畅动画的能力。...它被放置另外两个视图中间,并且以 Guideline 的形式作为另外两个视图的划分。 主要的 PlayerView 被限制为永远在 ReactiveGuide 的上方。...当设备方向为水平向且 FoldingFeature.isSeparating() 返回了 true 时,此设备可能正处于桌面模式。...如果您要实现横屏功能,那么大多数时候,边界会以一个屏幕垂直居中的矩形来表示,它和屏幕一样宽,并且高度与铰链相同 (对于可折叠设备而言值为 0,对于双屏幕设备而言会是两个屏幕之间的距离)。...* 这里的计算默认会包含内边距。

    2.4K30

    ConstraintLayout2.0一篇写不完之嵌套滚动怎么滚

    ConstraintLayout1.x阶段,它主要提供的能力是对静态布局的支撑,那么到2.x之后,MotionLayout的拓展,让它对动态布局的支持有了进一步的优化,1.x阶段不能实现的嵌套滚动布局布局方式...ConstraintLayout2.x,有两种方式来实现嵌套滚动布局。...image-20210223105619990 AppBarLayout,我们通过MotionLayout控制动画效果。...那么在这里,一般又有两个套路,一是直接使用MotionLayout,然后代码里面通过AppBarLayout.OnOffsetChangedListener的回调,设置MotionLayout的progress...对于外层的MotionLayout,它的Scene提供两个能力,一个是控制头部从200dp,变为56dp,即提供一个伸缩的功能,另一个重要的而且很容易被忽视的作用,就是给内层MotionLayout提供

    1.1K30

    两个疾病的患者的PBMC跟正常人的单细胞转录组水平差异很大吗

    所以研究者们就选取了这两个疾病( Type 2 diabetes mellitus (DM)和 periodontitis (PD) )的患者的PBMC公共数据集做研究: GSE165816 includes...两个单细胞转录组数据集汇总后是: 11 healthy controls, 10 patients with PD without DM, six patients with PDDM 值得一提的是这个数据挖掘是韩国人做的哦...and type 2 diabetes deciphered by single‐cell RNA analysis》 首先是降维聚类分群和分组后看比例变化 如下所示: 看比例变化 然后是各个单细胞亚群不同分组的各种差异分析和富集分析...CD8T and NK cells 打分:The cytotoxicity, exhaustion and activity scores 拟时序 细胞通讯 首先看看GSE164241 是2021发表CELL...这两个疾病的患者的PBMC跟正常人的单细胞转录组水平差异很大吗?有必要这样做吗? 现在呢,基本上每个疾病都是有公开的单细胞数据集,而且很多疾病都是多个数据集,是不是可以做各种各样的联合分析了呢?

    31310

    MontionLayout:打开动画新世界大门(其一)

    简单翻译过来就是:MontionLayout 是一个能够帮助我们 app 管理手势和控件动画的布局组件。它是 ConstraintLayout 的子类并且基于它自身丰富的布局功能来进行构建。...2.2 布局文件中使用 MotionLayout 想要使用 MotionLayout,只需要在布局文件作如下声明即可: <android.support.constraint.motion.MotionLayout...我们先来看看 MotionLayout 的构成: ? 由上图可知,MotionLayout 可分为和两个部分。部分可简单理解为一个 ConstraintLayout,至于其实就是我们的“动画层”了。...当然你也可以布局文件对其加以约束,但 MotionScene 对于控件约束的优先级会高于布局文件的设定。...由于三个 Android 机器人起点位置是一样的,而只有蓝色的显示,那么只要在开始位置将另外的两个机器人透明度设置为 0 即可,然后结束位置将三个小机器人分开摆放,这里设计到 ConstraintLayout

    95830
    领券