一个“自带焦点”的跑马灯效果的alwaysfocusTextView 及 手动控制跑马效果的实现

首先,普通情况下
TextView
*聚焦状态下显示跑马灯文字效果需要
android:focusable=“true”
android:ellipsize=“marquee”
android:marqueeRepeatLimit=“marquee_forever”
android:scrollHorizontally=“true”

有时是不需要textview能获取焦点的,但同时要实现跑马灯效果
这个时候可以继承一下textview,重写isFocused()方法
使其返回true

在这里插入图片描述

使用时
maxEms指定文本超过几个大写M字母的宽度时开始跑马灯
			 android:ellipsize="marquee"
             android:marqueeRepeatLimit="marquee_forever"
             android:maxEms="10"
             android:singleLine="true"
有时textview是不能获取焦点的,但同时要实现焦点在textview父组件上时有跑马灯效果
这个时候可以继承一下textview,重写isFocused()方法
使其根据textview isSelected()的状态来返回truefalse。如下:
public class MarqueeTextView extends AppCompatTextView {
    public MarqueeTextView(Context context) {
        super(context);
    }

    public MarqueeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean isFocused() {
        if (isSelected()) {
            return true;
        }
        return false;
    }
}
在文本的父组件上根据焦点监听 控制文本的选中状态和 ellipsize, 实现跑马灯效果的跟随改变
 binding!!.user.mine.cardWhole.setOnFocusChangeListener { v, hasFocus ->
//            binding!!.user.mine.cardTitle.isSelected = hasFocus
            if (hasFocus){
                binding!!.user.mine.cardTitle.isSelected=true
                binding!!.user.mine.cardTitle.ellipsize = TextUtils.TruncateAt.MARQUEE
            }else{
                binding!!.user.mine.cardTitle.isSelected=false
                binding!!.user.mine.cardTitle.ellipsize = TextUtils.TruncateAt.END
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值