Android中实现跑马灯效果

Android中实现跑马灯效果

第一种,比较简单,直接用textView来实现。

 <TextView
        android:singleLine="true"
        android:ellipsize="marquee"
        android:text="大王让我来巡山,寻了南山寻北山"
        android:background="@color/colorAccent"
        android:textSize="30sp"
        android:textColor="#ffffff"
        android:padding="10dp"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

直接在布局文件中使用这个textview即可,其中的关键代码是:

         android:singleLine="true" //设置文字只显示一行
         android:ellipsize="marquee"// 设置无法显示的文字的显示方式为跑马灯
         android:marqueeRepeatLimit="marquee_forever"//设置跑马灯的重复方式
         android:text="大王让我来巡山,寻了南山寻北山"//注意文字一定要长,否则无效果
         android:focusableInTouchMode="true" //通过触摸方式获取焦点
         android:focusable="true"//获取焦点
缺点:如果在同一布局中有EditText、ScrollView等会自动获取焦点的View的话,那么我们在布局文件中声明的这个textView就无法获取焦点,也就意味着跑马灯效果会失效。
优点:代码量少,只需要声明必要的属性即可完成跑马灯效果。

第二种,继承TextView

public class MyTextView extends TextView {
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">MyTextView</span><span class="hljs-params">(Context context)</span> </span>{
    <span class="hljs-keyword">super</span>(context);
}

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">MyTextView</span><span class="hljs-params">(Context context,  AttributeSet attrs)</span> </span>{
    <span class="hljs-keyword">super</span>(context, attrs);
}

<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">MyTextView</span><span class="hljs-params">(Context context,  AttributeSet attrs, <span class="hljs-keyword">int</span> defStyleAttr)</span> </span>{
    <span class="hljs-keyword">super</span>(context, attrs, defStyleAttr);
}

//重写这个方法,强制返回true
@Override
public boolean isFocused() {
return true;
}
}

在布局中使用

 <com.bawie.MyTextView
        android:singleLine="true"
        android:ellipsize="marquee"
        android:text="大王让我来巡山,寻了南山寻北山"
        android:background="@color/colorAccent"
        android:textSize="30sp"
        android:textColor="#ffffff"
        android:padding="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

核心代码:

    android:singleLine="true"
    android:ellipsize="marquee"
    android:text="大王让我来巡山,寻了南山寻北山"

可以看到,少了焦点处理的那些内容。

优点:即使在同一布局中有EditText、ScrollView等会自动获取焦点的View的话,我们的自定义textView依然可以获得焦点,跑马灯依然有效。
缺点:代码量大,需要自定义view,并且需要重写isFocused()方法

这两种方式,我们均无法控制文字的滚动速度和方向

第三种方式,自定义View

这个其实属于自定义View的范畴,不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值