zoukankan      html  css  js  c++  java
  • 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"/>

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

  • 相关阅读:
    各种算法七
    各种算法六
    使用URLConnection调用axis1.4开发的webservice
    JDBC结果集rs.next()注意事项
    URLConnection调用接口
    axis1.4开发webservice客户端(快速入门)-基于jdk1.4
    axis1.4开发webservice服务端(快速入门)-基于jdk1.4
    FMDB数据库的简单实用
    Xcode5 取消项目ARC,或者单个类ARC切换
    用CornerStone配置SVN,HTTP及svn简单使用说明
  • 原文地址:https://www.cnblogs.com/ken9527just/p/11422242.html
Copyright © 2011-2022 走看看