前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ConstraintLayout2.0一篇写不完之MotionLabel

ConstraintLayout2.0一篇写不完之MotionLabel

作者头像
用户1907613
发布2021-06-17 20:19:49
5210
发布2021-06-17 20:19:49
举报
文章被收录于专栏:Android群英传Android群英传

点击上方蓝字关注我,知识会给你力量

MotionLabel是CL2.1新加入的一个为单行文字制作动画的View,它支持下面几种典型的动画效果:

  • 使用PanX和PanY取代Gravity,它是一个float值,-1是左,0是中心,+1是右,它可以对位置进行动画
  • 可以设置文本轮廓的厚度和颜色,并设置它的动画效果
  • 给文本的背景设置颜色或纹理
  • 确保textSize的动画效果顺滑

❝那么问题来了,只支持单行??没错,MotionLabel并不是继承TextView,所以文字测量相关的方法是没有的,只能支持单行,那么多行咋办,其实很简单,你可以借助一个假的TextView来进行文字的测量,再通过它的API获取每行的文本,根据每行的文本,创建MotionLabel,或者更直接一点,通过TextMeasure来对文字进行测量。 ❞

纹理背景

下面的示例,展示了MotionLabel设置图片纹理作为它的background,主要涉及三个属性:

  • textBackground:不同于background,textBackground是文字的填充纹理
  • textureHeight:文字填充纹理的高度
  • textureWidth:文字填充纹理的宽度
  • textBackgroundRotate:文字填充纹理的旋转角度
  • textBackgroundZoom:文字填充纹理的缩放

❝当不设置textureWidth和textureHeight时,纹理默认撑满文字。 ❞

代码语言:javascript
复制
<androidx.constraintlayout.utils.widget.MotionLabel
    android:id="@+id/label1"
    android:layout_width="wrap_content"
    android:layout_height="200dp"
    android:background="@drawable/monterey"
    android:padding="10dp"
    android:text="XuYiSheng"
    android:textSize="60sp"
    android:textStyle="bold"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:textBackground="@drawable/avatar"
    app:textureHeight="10dp"
    app:textureWidth="10dp" />

image-20210527192322811

❝借助文字纹理,可以很方便的实现文字的Blur效果,实际上就是一张正常图片垫底,另一个MotionLabel使用背景图的Blur图做文字背景来实现的。 ❞

image-20210527195400855

TextOutline

MotionLabel还支持对文字添加描边处理,涉及到下面这些属性。

  • textOutlineColor:描边颜色
  • textOutlineThickness:描边宽度

image-20210527192747621

borderRound

MotionLabel自带了背景圆角的处理。

  • borderRound:按dp处理圆角
  • borderRoundPercent:按百分比处理圆角

textBackgroundPan

文字纹理背景的偏移,是通过textBackgroundPanX和textBackgroundPanY属性来实现的。

通过CustomAttribute给textBackgroundPanX和textBackgroundPanY设置-1到1的变换,就可以实现纹理背景移动的动画效果。

textPan

文字在MotionLabel中的偏移,使用的是textPanX和textPanY,同样是通过-1到1来实现定位。

通过CustomAttribute给textPanX和textPanY设置-2到2的变换,就可以实现文字的偏移动画。

动画就不贴了,太麻烦了,最后会有一个惊喜大Demo,满足你的一切幻想。

向大家推荐下我的网站 https://xuyisheng.top/ 点击原文一键直达

专注 Android-Kotlin-Flutter 欢迎大家访问

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 群英传 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 纹理背景
  • TextOutline
  • borderRound
  • textBackgroundPan
  • textPan
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档