javaee论坛

普通会员

225648

帖子

345

回复

359

积分

楼主
发表于 2017-07-22 03:03:10 | 查看: 416 | 回复: 1
如果有很长一段话在单行显示但显示不完全,在TextView框中只会显示前面可以显示的字符,后面的用...代替,造成数据的丢失

这时候就需要一个跑马灯效果来实现

在TextView控件的代码部分,添加以下四个属性

<span style="font-size:14px;">android:singleLine="true"android:ellipsize="marquee"android:focusable="true"android:focusableInTouchMode="true"</span>
第一条属性保证该文本控件是单行显示,第三条是完成跑马灯的效果,但是只有获得焦点后才可以实现这个效果,Textview默认是不会自动获取的,后两条属性是获得一个焦点
package com.example.lzd.test;import android.content.Context;import android.util.AttributeSet;import android.widget.TextView;/** * Created by LZD on 2016/7/31. */public class Marquee extends TextView {    public Marquee(Context context) {        super(context);    }    public Marquee(Context context, AttributeSet attrs) {        super(context, attrs);    }    public Marquee(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    public boolean isFocused() {        return true;    }}

现在的这个TextView是可以实现跑马灯效果的,但是如果在这个TextView下再添加一个跑马灯效果,我们想将其代码复制就可以,但是因为默认只获得一个焦点所以,下面的TextView就不会获得焦点,自然不会实现想要的跑马灯效果
在与MainActivity同包下定义一个class Marquee,让它继承TextView,实现它的三个构造方法并重写isFocused方法,return true;
isFocused方法,如果return true,则获得焦点,return false反之。重写之后的isFocused方法在每次执行的时候都会获得一个焦点。
最后在xml文件中将TextView替换为自己定义的继承了TextView的类所在的包下的类名,在这个例子中就是:<com.example.lzd.test.Marquee
再次运行的时候就会发现多个跑马灯效果都可以实现了


普通会员

0

帖子

312

回复

317

积分
沙发
发表于 2024-04-28 05:58:25

好好好

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017