侧边栏壁纸
博主头像
Stars-One的杂货小窝博主等级

所有的创作都是有价值的

  • 累计撰写 277 篇文章
  • 累计创建 46 个标签
  • 累计收到 27 条评论

目 录CONTENT

文章目录

Android 自定义TextView实现跑马灯效果

Stars-one
2024-09-05 / 0 评论 / 0 点赞 / 29 阅读 / 2649 字

由于传统TextView实现的跑马灯效果会受限于焦点,无法实现多个TextView同时有跑马灯效果,通过继承TextView实现方法来变现达到效果

不过测试的时候发现,好像弹个窗也会中断跑马灯效果?不确定是不是自己的用法不对

import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.widget.TextView

/**
 * 实现跑马灯效果的TextView
 */
@SuppressLint("AppCompatCustomView")
class MarqueeTextView : TextView {
    private var mNeedFocus = true

    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    )

    //返回 TextView 是否处在选中的状态 , 而只有选中的 TextView 才能够实现跑马灯效果
    //等效于 xml 中 <requestFocus />
    override fun isFocused(): Boolean {
        return true
        //if (mNeedFocus) {
        //    return false
        //}
        //return super.isFocused()
    }

    fun setNeedFocus(needFocus: Boolean) {
        mNeedFocus = needFocus
    }
}

使用(下面列出的是必要设置的属性)

<atute.yelike.micplay.view.MarqueeTextView
        ...
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:singleLine="true"
        android:lines="1"
        android:maxLines="1"
		...
        />

这里我没有再次封装了,也可以将上面的必要属性写在代码中,这样使用的时候就不用再xml再进行设置了

0

评论区