首先我们要实现走马灯这样一个效果,通常来说都是在TextView这个控件中来实现的,而且其中的文字一定是单行显示,如果多行显示,那走马灯效 果也就失去了存在的意义。谈到TextView的跑马灯,我们首先应该想到android:ellipsize="marquee"(start、end 属性表示前或者后省略),而如果要在view中实现跑马灯功能,就需要TextView改为Button,开启触控焦点在开启状态 android:focusableInTouchMode="true",否则是不会看到跑马灯效果的。
- <Button
- android:focusableInTouchMode="true"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:text="未使用自定义TextView的跑马灯效果"
- android:textSize="18sp"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
先编写自定义TextView
- package com.zebra.mobilesafe.ui;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.view.ViewDebug.ExportedProperty;
- import android.widget.TextView;
- /**
- * 自定义一个TextView,是他天生就有焦点
- * @author Administrator
- *
- */
- public class FocusTextView extends TextView {
- public FocusTextView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- // TODO Auto-generated constructor stub
- }
- public FocusTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- }
- public FocusTextView(Context context) {
- super(context);
- // TODO Auto-generated constructor stub
- }
- /**
- * 欺骗Android系统,让当前没有焦点的判断为true,实现button效果
- */
- @Override
- @ExportedProperty(category = "focus")
- public boolean isFocused() {
- // TODO Auto-generated method stub
- return true;
- }
- }
这样就可以在TextView中实现跑马灯效果了。
- <com.zebra.mobilesafe.ui.FocusTextView
- android:singleLine="true"
- android:ellipsize="marquee"
- android:text="使用自定义TextView的跑马灯效果"
- android:textSize="18sp"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
来源: http://www.phpxs.com/code/1002084/