众所周知 android sdk中提供了跑马灯效果,下面我来简单介绍一下该效果的应用场景:
就是在TextView以及TextView的子控件中(如还有其他控件支持请留言,必跟新)文本显示不全的情况,使其文本内容滚动显示,达到用户可以看到全部文本信息的效果。
下面我就跟大家分析其几种用法(最后一种你未必用过,也是本文的重点):
今天就以TextView为例
1.首先想要你的控件支持跑马灯效果,要先在xml中配置红色部分代码:
<TextView
android:layout_height="150dp"
android:layout_width="150dp"
android:gravity="center"
android:textSize="2dp"
android:marqueeRepeatLimit="marquee_forever"
android:ellipsize="marquee"
android:singleLine="true" / >
在配置完红色部分代码后你的TextView就具有跑马灯效果了(必须要获取到焦点才会有效,如果你想不获取焦点也有效果那该怎么办呢,请继续往下看)。
2.如果你想要你的控件在未获取焦点时也有跑马灯效果,那就请重写你的TextView控件,
重写isFocused方法,返回true; 重点在红色标志区域 代码如下:
import android.content.Context;
import android.util.AttributeSet;
public class FocusLabelTextView extends TextView {
public FocusLabelTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public FocusLabelTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public FocusLabelTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public boolean isFocused() {
// TODO Auto-generated method stub
//返回true的意思是,该控件被欺骗为 获取焦点
return true;
//return super.isFocused();
}
}
3.第三种方法乃是本文的重点,前面两种方法目前已经比较常见。 第二种方法有个缺点就是 无法随时控制跑马灯 停和跑, 而且跑马灯在跑的时候很耗资源。
所以我就想是否有方法可以由我们自己来控制跑马灯的 停和跑呢? 经过研究终于被我找到了:
在配置了1中的xml信息后, 你可以在你需要跑马灯跑的时候调用TextView.setSelected(true); 停的时候调用TextView.setSelected(false)。这样就可以自由的控制了。