TextView实现跑马灯效果
博客专区 > GaoLeng 的博客 > 博客详情
TextView实现跑马灯效果
GaoLeng 发表于2年前
TextView实现跑马灯效果
  • 发表于 2年前
  • 阅读 118
  • 收藏 6
  • 点赞 1
  • 评论 0
1、单个TextView实现跑马灯效果

        在这里我们只需设置xml文件就能实现效果。

 <club.zhanyan.yangjie.marqueetextviewdemo.MarqueeTextView
        android:id="@+id/textViewId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"     //设置文字超过控件宽度时的显示方式
        android:focusable="true"     //设置是否获取焦点
        android:focusableInTouchMode="true"   //设置是否在触摸模式下获得焦点
        android:marqueeRepeatLimit="marquee_forever"//设置滚动次数,marquee_forever为无限次
        android:singleLine="true"     //设置文本单行显示
        android:text="我是一个长的TextView,我是一个长的TextView,我是一个长的TextView。" />
2、多个TextView实现跑马灯效果

        如果设置多个TextView的跑马灯效果,就需要为多个TextView设置焦点。而默认情况下,是只能一个TextView获取焦点的。所以,在这里我们需要强制设置焦点。

        我们以两个TextView为例:

        首先,我们创建一个类继承自TextView类,并且重写MarqueeTextView类所有的构造方法,并且重写isFocused()方法,返回值为true,并且将布局文件中的TextView控件改成我们自定义的类,就可以实现多个TextView的跑马灯效果了。

        下面是代码:

        xml代码:

<club.zhanyan.yangjie.marqueetextviewdemo.MarqueeTextView
        android:id="@+id/textViewId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:singleLine="true"
        android:text="我是一个长的TextView,我是一个长的TextView,我是一个长的TextView。" />
<club.zhanyan.yangjie.marqueetextviewdemo.MarqueeTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textViewId"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="我是一个长的TextView,我是一个长的TextView,我是一个长的TextView。" />

        Java代码:

 package club.zhanyan.yangjie.marqueetextviewdemo;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView; 
public class MarqueeTextView extends TextView{
    public MarqueeTextView(Context context) {
        supe(context);
    }
    public MarqueeTextView(Context context, AttributeSet attrs) {
        supe(context, attrs);
    }
    public MarqueeTextView(Context context, AttributeSet attrs, defStyleAttr) {
        supe(context, attrs, defStyleAttr);
    }
    @override
    public boolean isFocused() {
        return true;
    }
}

附:

ellipsize的属性:

android:ellipsize=”start”    //省略号显示在开头 "...leng"
android:ellipsize=”end”      //省略号显示在结尾  "gao..."
android:ellipsize=”middle”   //省略号显示在中间 "ga..eng"
android:ellipsize=”marquee”  //以横向滚动的方式显示(必须在获得当前焦点时)
共有 人打赏支持
粉丝 0
博文 1
码字总数 509
×
GaoLeng
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: