Android单行跑马灯效果实现

参考网址:https://www.jianshu.com/p/e6c1b825d322

起初,使用了如下XML布局:

 1 <TextView
 2                 android:id="@+id/tv_person_name"
 3                 android:layout_marginTop="16dp"
 4                 android:layout_width="125dp"
 5                 android:layout_height="wrap_content"
 6                 android:text="健康快乐的小..."
 7                 android:textSize="20sp"
 8                 android:textColor="#CE000000"
 9                 android:layout_alignParentLeft="true"
10                 android:layout_marginLeft="85dp"
11                 android:singleLine="true"//设置单行
12                 android:ellipsize="marquee"//跑马灯
13                 android:marqueeRepeatLimit="marquee_forever"//无限循环
14                 android:focusable="true"//获得焦点
15                 android:focusableInTouchMode="true" />

结果是:能暂时实现跑马灯效果,但在多次点击事件之后容易失焦。而且在Android4.4上实现有短暂停顿。

focusable和focusableInTouchMode的区别:https://blog.csdn.net/SylG17/article/details/85047234

曾尝试通过EvenBus重新获取焦点,但是并无卵用。

后来采用自定义跑马灯类:

 1 public class MarqueeTextView extends AppCompatTextView {
 2     /** 滚动次数 */
 3     private int marqueeNum = -1;//-1为永久循环,大于0是循环次数。`
 4     public void setMarqueeNum(int marqueeNum) {
 5         this.marqueeNum = marqueeNum;
 6     }
 7     public MarqueeTextView(Context context) {
 8         super(context);
 9         setAttr();
10     }
11     public MarqueeTextView(Context context, AttributeSet attrs) {
12         super(context, attrs);
13         setAttr();
14     }
15     public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
16         super(context, attrs, defStyle);
17         setAttr();
18     }
19     /**
20      * 始终获取焦点
21      * 跑马灯在TextView处于焦点状态的时候才会滚动
22      */
23     @Override
24     public boolean isFocused() {
25         return true;
26     }
27     /**
28      * 设置相关属性
29      */
30     private void setAttr(){
31         this.setEllipsize(TextUtils.TruncateAt.MARQUEE);//设置跑马等效果
32         this.setMarqueeRepeatLimit(marqueeNum);//设置跑马灯重复次数
33         this.setSingleLine(true);//设置单行
34     }
35 }

采用自定义跑马灯控件:

 1 <com.sz.cszj.intelligentrobot.cszjrobot.view.MarqueeTextView
 2                 android:id="@+id/tv_person_name"
 3                 android:layout_marginTop="16dp"
 4                 android:layout_width="125dp"
 5                 android:layout_height="wrap_content"
 6                 android:text="健康快乐的小..."
 7                 android:textSize="20sp"
 8                 android:textColor="#CE000000"
 9                 android:layout_alignParentLeft="true"
10                 android:layout_marginLeft="85dp"/>

效果:不会失焦,能实现跑马灯效果。但是依然会有卡顿。

猜你喜欢

转载自www.cnblogs.com/ken9527just/p/11422242.html