TextView实现跑马灯效果

本文介绍如何在Android中利用TextView实现跑马灯效果,并保持无限滚动。通过设置TextView属性如singleLine、marqueeRepeatLimit等,结合自定义TextView使其实现自动获取焦点并持续滚动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当要输入的文字长度大于TextView本身的长度时,就可以考虑用跑马灯的方式来显示文字。

<TextView 
        android:id="@+id/tvCWJ" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:scrollbars="vertical"  
        android:singleLine="true"<!-- 单行显示,跑马灯只要单行显示时才有效果 -->

       android:focusable="true"<!-- 只有在textView获得焦点时跑马灯才有效果 -->

        android:ellipsize="marquee"<!-- 设置为marquee跑马灯形式 -->

        marqueeRepeatLimit="marquee_forever"<!-- 表示走马灯的滚动效果重复的次数,你可以填一个自然数.marquee_forever代表一直重复 -->

        android:textColor="#FF0000"
        android:text="大家注意到在TextView中我添加了三行蓝色的字段,其中singleLine表示TextView中文本为
   单行文本如果你在你的程序中设置了setHorizontallyScrolling(true)在这你可以不写了,
   接下来就是我们的关键之处了此语句表示我们将TextView设置为了一个走马灯,marqueeRepeatLimit=
   表示走马灯的滚动效果重复的次数,你可以填一个自然数。大家注意到在TextView中我添加了三行蓝色的字段,其中singleLine表示TextView中文本为
   单行文本如果你在你的程序中设置了setHorizontallyScrolling(true)在这你可以不写了,
   接下来就是我们的关键之处了此语句表示我们将TextView设置"
 />

 

但是,TextView的滚动显示,有一个前提,TextView需要必须处于focus状态。当TextView失去焦点的时候,TextView将会停止滚动。如何实现无限滚动,当然也需要从焦点入手。当然,直接requestFocus()是不行的,这里我使用了另外一个方法。观察到textView有一个名为isFocused()的方法,文档中的注释是这样的:

/** * Returns true if this view has focus * * @return True if this view has focus, false otherwise. */

也就是说当TextView拥有焦点的时候会返回true.同时可以发现,TextView中很多地方都是直接调用这个方法作为判断条件,最关键的,这个方法被声明为public! ok, 实现方法已经初现端倪了!

 

 样例如下:

public class MyTextView extends TextView{
 public MyTextView(Context context) { 
        super(context); 
    } 
 
    public MyTextView(Context context, AttributeSet attrs) { 
        super(context, attrs); 
    } 
 
    public MyTextView(Context context, AttributeSet attrs, int defStyle) { 
        super(context, attrs, defStyle); 
    } 
     
    @Override 
    public boolean isFocused() { 
        return true; 
    } 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值