MaterialEditText 标签浮动 自定义view


前言

写一个带浮动标签的自定义EditText。效果如下
请添加图片描述


一、大致实现思路?

做两个动画,监听文本变化,有文本时从下往上飘出一个标签,内容和EditTexthint内容一致。没有文本(开始时,或者文本删除干净时)标签从上往下逐渐隐藏。

二、实现步骤

1.创建类MaterialEditText去继承EditText

代码如下

class MaterialEditText(context: Context, attrs: AttributeSet?) : AppCompatEditText(context, attrs)

2.创建一些基本变量

代码如下

    //标签的字体大小,标签的margin
    private val LABEL_SIZE = 12.dp
    private val LABEL_MARGIN = 2.dp
    //给标签描绘文字的paint
    private val labelPaint = Paint(Paint.ANTI_ALIAS_FLAG)
    //留给标签的空间
    private val VERTICAL_OFFSET = LABEL_SIZE + LABEL_MARGIN
    //标签消失时往下飘的距离
    private val EXTRA_VERTICAL_OFFSET = 16.dp
    //标签左边的间距
    private val HORIZONTAL_OFFSET = paddingLeft.toFloat()
    //设置消失动画时的进度值
    private var floatingLabelFraction = 0f
        set(value) {
   
            field = value
            invalidate()
        }
    //目前标签是否展示出来了
    private var floatingLabelShown = false
        set(value) {
   
            field = value
            invalidate()
        }
    //属性动画,使用懒加载
    private val animator by lazy {
    ObjectAnimator.ofFloat(this, "floatingLabelFraction", 0f, 1f) }
    //和XML中设置是否启用标签动画,用这个变量记录
    private var isShowFloatingLabel = true
        set(value) {
   
            //这个值实际被修改时才会去执行代码
            if (isShowFloatingLabel != value) {
   
                field = value
                if (value) {
   
                    //本来标签是关闭的,那么把标签的空间留出来
                    setPadding(
                        paddingLeft,
                        (paddingTop + LABEL_SIZE + LABEL_MARGIN).toInt(),
                        paddingRight,
                        paddingBottom
                    )
                } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值