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);
}