• 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"/>

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

  • 相关阅读:
    视频: 不抱怨才有今天的马云---励志演讲
    ArcGIS图框工具5.2发布,支持ArcGIS10.0,10.110.2,支持国家2000坐标系
    arcgis 10.2 安装教程(含下载地址)
    delete
    基金销售牌照火热的背后,基金销售牌照、基金支付牌照
    快递业务经营许可证企业信息(截止2016.6.30)
    1月北上广P2P平台之最 平台数成交量现双降
    公募基金牌照:谁在布局?
    delete
    各地互联网小贷牌照申请全揭秘
  • 原文地址:https://www.cnblogs.com/ken9527just/p/11422242.html
Copyright © 2020-2023  润新知