最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
android应用中用TextView实现跑马灯效果实例教程
时间:2022-11-14 22:16:57 编辑:袖梨 来源:一聚教程网
如何实现两个TextView的跑马灯效果,如果使用常规的做法,只能够使一个TextView起作用。 现在方法具体如下:
1.为TextView增加四个属性
android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:singleLine="true"
实现TextView类,实现三个构造函数并重载 isFocused方法。
public class MarqueeText extends TextView { public MarqueeText(Context context) { super(context); }
public MarqueeText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueeText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean isFocused() {
return true;
} }
在main.xml文件中使用自己实现的TextView类。
这样就实现了两个跑马灯的效果了。 这里主要是重写了isFocuse方法,这样默认两个TextView都被Focuse了,所以这两个TextView都可以跑马灯了。
Android实现多个TextView同时显示跑马灯效果
如果在一个较小的android页面中,需要显示较长的文案时无法显示完全,于是很自然地想到了TextView中的marquee ―― 跑马灯效果,可是Android执行跑马灯效果需要控件获取焦点,当某一控件requestFocus()时,会将其他控件的焦点抢去,这就导致了同一时间只能有一个控件获取焦点。那么,如果让多个控件同时获取并持有焦点呢?或者说,“欺骗”Android系统,让它以为多个控件都持有焦点,即每个控件都在焦点状态。
通过上述分析,问题转化为如何让多个控件同时处于焦点状态,这就需要重写TextView的部分方法,达到“欺骗”Android系统的目的,这样每个控件requestFocus()之后,均让自己处于焦点状态,并且不可被剥夺焦点,就可以达到多个控件同时“持有”焦点了,代码如下:
public class MarqueeTextView extends TextView
{
public MarqueeTextView(Context context)
{
this(context, null);
}
public MarqueeTextView(Context context, AttributeSet attrs)
{
super(context, attrs);
setFocusable(true);
setFocusableInTouchMode(true);
setSingleLine();
setEllipsize(TextUtils.TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
setFocusable(true);
setFocusableInTouchMode(true);
setSingleLine();
setEllipsize(TextUtils.TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect)
{
if (focused)
{
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
}
@Override
public void onWindowFocusChanged(boolean focused)
{
if (focused)
{
super.onWindowFocusChanged(focused);
}
}
@Override
public boolean isFocused()
{
return true;
}
}
由于常规执行跑马灯的属性:
android:focusable="true"、android:focusableInTouchMode="true"、android:singleLine="true"、android:ellipsize="marquee"
在代码中均已设置,故引用此控件时,无需添加上述4个属性。
相关文章
- 崩坏星穹铁道昔涟光锥选择推荐 10-28
- 二重螺旋支持手柄吗 多平台适配情况介绍 10-28
- 二重螺旋云游戏网页入口 云二重螺旋在线玩下载地址 10-28
- 二重螺旋预约地址入口在哪 全平台预约入口汇总 10-28
- 辉烬骑士守卫实战怎么样 10-28
- 三国志异闻录有什么宝物 10-28