返回顶部
首页 > 资讯 > 移动开发 >Android自定义可控制速度的跑马灯
  • 939
分享到

Android自定义可控制速度的跑马灯

2024-04-02 19:04:59 939人浏览 安东尼
摘要

背景 原生的TextView是支持跑马灯效果的,但是在项目中实际用了之后,达不到需求,原因是内容滚动太慢,速度无法调节。因此,需要自定义一个可以调节速度的跑马灯。 思路 目前实现的思

背景

原生的TextView是支持跑马灯效果的,但是在项目中实际用了之后,达不到需求,原因是内容滚动太慢,速度无法调节。因此,需要自定义一个可以调节速度的跑马灯。

思路

目前实现的思路是对文本内容不断地重绘,同时改变每次重绘的坐标,来在视觉上达到内容在滚动的效果。缺点是如果每次改变的坐标差值太大,会有明显的卡顿效果。经过调试,下面源码中的速度感觉还可以接受,如果有特殊需求,自行在调试一下。

源码(Kotlin)

class CustomMarqueeView : AppCompatTextView {
    compaNIOn object {
        val SPEED_FAST = 9
        val SPEED_MEDIUM = 6
        val SPEED_SLOW = 3
    }

    //View宽度
    private var mViewWidth = 0
    private var mViewHeight = 0
    private var mScrollX = 0F
    private var mMarqueeMode = 3
    private val rect = Rect()

    constructor(context: Context) : this(context, null)
    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    ) {
        includeFontPadding = false
        initAttrs(context, attrs)
    }

    fun setScrollSpeed(speed: Int) {
        if (speed == SPEED_FAST || speed == SPEED_MEDIUM || speed == SPEED_SLOW) {
            mMarqueeMode = speed
        }
    }


    override fun onDraw(canvas: Canvas?) {
        val textContentText = text.toString().trim()
        if (TextUtils.isEmpty(textContentText)) {
            return
        }
        val x = mViewWidth - mScrollX
        val y = mViewHeight / 2F + getTextContentHeight() / 2
        canvas?.drawText(textContentText, x, y, paint)
        mScrollX += mMarqueeMode
        if (mScrollX >= (mViewWidth + getTextContentWdith())) {
            mScrollX = 0F
        }
        invalidate()
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        mViewWidth = MeasureSpec.getSize(widthMeasureSpec)
        mViewHeight = MeasureSpec.getSize(heightMeasureSpec)
    }
    
    override fun setTextColor(color: Int) {
        super.setTextColor(color)
        paint.setColor(color)
    }

    private fun initAttrs(context: Context, attrs: AttributeSet?) {
        val typeArray = context.obtainStyledAttributes(attrs, R.styleable.CustomMarqueeView)
        mMarqueeMode =
            typeArray.getInt(R.styleable.CustomMarqueeView_customScrollSpeed, mMarqueeMode)
        typeArray.recycle()
    }

    
    private fun getTextContentWdith(): Int {
        val textContent = text.toString().trim()
        if (!TextUtils.isEmpty(textContent)) {
            paint.getTextBounds(textContent, 0, textContent.length, rect)
            return rect.width()
        }
        return 0
    }

    
    private fun getTextContentHeight(): Int {
        val textContent = text.toString().trim()
        if (!TextUtils.isEmpty(textContent)) {
            paint.getTextBounds(textContent, 0, textContent.length, rect)
            return rect.height()
        }
        return 0
    }
}

自定义属性

<declare-styleable name="CustomMarqueeView">
  <attr name="customScrollSpeed">
    <enum name="fast" value="9" />
    <enum name="medium" value="6" />
    <enum name="slow" value="3" />
  </attr>
</declare-styleable>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Android自定义可控制速度的跑马灯

本文链接: https://lsjlt.com/news/152831.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android自定义可控制速度的跑马灯
    背景 原生的TextView是支持跑马灯效果的,但是在项目中实际用了之后,达不到需求,原因是内容滚动太慢,速度无法调节。因此,需要自定义一个可以调节速度的跑马灯。 思路 目前实现的思...
    99+
    2024-04-02
  • Android——自定义控件(跑马灯实例)
    说到自定义控件,自定义控件不仅能够让自己对控件的掌握更加熟悉,还可以实现很多功能,同时也可以节省出很多的时间! 人生中第一篇博客便是关于Text...
    99+
    2022-06-06
    自定义 自定义控件 跑马灯 Android
  • Android自定义跑马灯文字效果
    本文实例为大家分享了Android自定义跑马灯文字的具体代码,供大家参考,具体内容如下 Android 跑马灯效果文字: 效果图(真实动画很流畅,这个转gif有问题,感觉有点卡...
    99+
    2022-06-06
    跑马灯 Android
  • Android自定义View实现纵向跑马灯效果详解
    首先看看效果图(录制的gif有点卡,真实的效果还是很流畅的) 实现思路 通过上面的gif图可以得出结论,其实它就是同时绘制两条文本信息,然后通过动画不断的改变两条文本信息...
    99+
    2022-06-06
    view 跑马灯 Android
  • Android自定义View实现竖直跑马灯效果案例解析
    首先给出跑马灯效果图   中间的色块是因为视频转成GIF造成的失真,自动忽略哈。 大家知道,横向的跑马灯android自带的TextView就可以实现,详情请百度【...
    99+
    2022-06-06
    view 跑马灯 Android
  • Android自定义textview如何实现竖直滚动跑马灯效果
    这篇文章主要为大家展示了Android自定义textview如何实现竖直滚动跑马灯效果,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。xml布局<&#63;xml version=...
    99+
    2023-05-31
    android textview roi
  • Android自定义控件制作显示进度的Button
    最近看到一些应用在下载文件的时候,并没有额外弹出进度条,而是很炫的使用启动下载任务的Button直接显示文件的下载进度,通过改变其背景色,从左向右推进,直到填满整个Button...
    99+
    2022-06-06
    button Android
  • Android自定义View弧线进度控件
    这个是一个以弧线为依托的进度控件,主要包括了两个圆弧、一个圆、一个文本。   当我们点击开始按钮的时候,会出现一个动画,逐渐的出现进度,好了,下面开始我们的编码。 ...
    99+
    2022-06-06
    view Android
  • Android 可拖动的seekbar自定义进度值
    最近接了个项目其中有需要要实现此功能:seekbar需要显示最左和最右值,进度要跟随进度块移动。下面通过此图给大家展示下效果,可能比文字描述要更清晰。 其实实现起来很简单,主...
    99+
    2022-06-06
    seekbar Android
  • Android权限控制之自定义权限
    天哪,这篇文章终于说道如何自定义权限了,左盼右盼,其实这个自定义权限相当easy。为了方便叙述,我这边会用到两个app作为例子示范。 Permission App: used ...
    99+
    2022-06-06
    自定义 Android
  • Android自定义带有圆形进度条的可长按控件功能
    这几天有在学习Jetpack中CameraX的内容,在拍摄视频的时候想着做一个自定义带有进度条的可长按控件,用来显示拍摄进度,故记录下来与大家分享!效果如下: (篇幅过长是因为有代码...
    99+
    2024-04-02
  • Android view自定义带文字带进度的控件
    目标:自定义一个带文字带进度的控件,具体内容如下效果图:不啰嗦先看东西:步骤分析提取自定义属性//提供对外暴露的属性,如有不够自己扩展 <declare-styleable name="DescProgressView"> ...
    99+
    2023-05-30
    android view 进度
  • Android自定义View圆形进度条控件(三)
    继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲染以及画布旋转等知识点,效果如下: 虽然步骤类似,但是我还是要写,毕竟基础的...
    99+
    2022-06-06
    view 进度条 Android
  • Android自定义控件实现圆形进度条
    项目中常用到的圆形进度条有好多个,从网上搜到的自定义进度条多是封装的比较好的代码,但是不利于初学者,现在本博客就教给大家如何一步步实现自定义进度条的效果: 先看效果如图… ...
    99+
    2022-06-06
    进度条 Android
  • Android自定义控件之创建可复用的组合控件
    前面已学习了一种自定义控件的实现,是Andriod 自定义控件之音频条,还没学习的同学可以学习下,学习了的同学也要去温习下,一定要自己完全的掌握了,再继续学习,贪多嚼不烂可不是...
    99+
    2022-06-06
    Android
  • Android自定义View圆形进度条控件的方法
    这篇文章主要讲解了Android自定义View圆形进度条控件的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲...
    99+
    2023-05-31
    android roi %d
  • Wordpress自定义函数控制文章标题长度
    WordPress显示文章标题的时候,当文章标题过长而且文章的标题又在主页显示时,如果发生换行的现象就显得不美观了,这时候除了利用css来控制文章标题长度外,还可以通过一个简单的php函数来控制。在wp-includes...
    99+
    2022-06-12
    Wordpress 自定义函数 标题长度
  • Android使用GridLayout绘制自定义日历控件
    效果图 思路:就是先设置Gridlayout的行列数,然后往里面放置一定数目的自定义日历按钮控件,最后实现日历逻辑就可以了。 步骤: 第一步:自定义日历控件(初步) 第二步:...
    99+
    2022-06-06
    自定义 gridlayout Android
  • Android seekbar(自定义)控制音量同步更新
    Android seekbar控制音量同步更新   作为开发人员来讲,seekbar你一定会碰到,那么怎么自定义seekbar以及seekbar控制的音量怎么与系统的...
    99+
    2022-06-06
    自定义 更新 seekbar Android
  • Android如何自定义带有圆形进度条的可长按控件功能
    今天小编给大家分享一下Android如何自定义带有圆形进度条的可长按控件功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。(...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作