查看: 442|回复: 0

[Android教程] android TextView实现跑马灯效果

发表于 2017-11-28 08:00:01

本文实例为大家分享了android TextView跑马灯效果的具体代码,供大家参考,具体内容如下

一、要点

设置四个属性

android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"

直接在xml中使用

  1. <TextView
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:singleLine="true"
  5. android:ellipsize="marquee"
  6. android:focusable="true"
  7. android:focusableInTouchMode="true"
  8. android:text="人生是一场无休、无歇、无情的战斗,凡是要做个够得上称为人的人,都得时时向无形的敌人作战。" />
复制代码

注意:singleLine属性 不能换成 maxlLines

二、复杂布局

在复杂的布局中可能不会实现跑马灯效果。例如如下布局中,就只有第一个TextView会有跑马灯效果

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <TextView
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:id="@+id/tv1"
  10. android:singleLine="true"
  11. android:ellipsize="marquee"
  12. android:focusable="true"
  13. android:focusableInTouchMode="true"
  14. android:text="人生是一场无休、无歇、无情的战斗,凡是要做个够得上称为人的人,都得时时向无形的敌人作战。" />
  15. <TextView
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:layout_below="@+id/tv1"
  19. android:layout_marginTop="10dp"
  20. android:singleLine="true"
  21. android:ellipsize="marquee"
  22. android:focusable="true"
  23. android:focusableInTouchMode="true"
  24. android:text="人生是一场无休、无歇、无情的战斗,凡是要做个够得上称为人的人,都得时时向无形的敌人作战。" />
  25. </RelativeLayout>
复制代码

这时候就需要自定义View,实现跑马灯效果

自定义MarQueeTextView extents TextView 重写isFocused()方法,返回true

  1. public class MarqueeText extends TextView {
  2. public MarqueeText(Context context) {
  3. super(context);
  4. }
  5. public MarqueeText(Context context, @Nullable AttributeSet attrs) {
  6. super(context, attrs);
  7. }
  8. public MarqueeText(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  9. super(context, attrs, defStyleAttr);
  10. }
  11. @Override
  12. public boolean isFocused() {
  13. return true;
  14. }
  15. }
复制代码

布局中使用

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <com.example.dhj.marqueedemo.View.MarqueeText
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:id="@+id/tv1"
  10. android:singleLine="true"
  11. android:ellipsize="marquee"
  12. android:focusable="true"
  13. android:focusableInTouchMode="true"
  14. android:text="人生是一场无休、无歇、无情的战斗,凡是要做个够得上称为人的人,都得时时向无形的敌人作战。" />
  15. <com.example.dhj.marqueedemo.View.MarqueeText
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:layout_below="@+id/tv1"
  19. android:layout_marginTop="10dp"
  20. android:singleLine="true"
  21. android:ellipsize="marquee"
  22. android:focusable="true"
  23. android:focusableInTouchMode="true"
  24. android:text="人生是一场无休、无歇、无情的战斗,凡是要做个够得上称为人的人,都得时时向无形的敌人作战。" />
  25. </RelativeLayout>
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。



回复

使用道具 举报

关闭

站长推荐上一条 /1 下一条