您的位置:首页 > 其它

TextView实现跑马灯效果

2012-12-18 10:59 441 查看
当要输入的文字长度大于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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: