一、Android 实现两个TextView跑马灯效果

超长的文字在有限的布局中,实现一行循环显示?

如果是只有一个TextView实现跑马灯效果可以简单使用以下方式来实现:

 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是一个Hello World!我是一个Hello World!我是一个Hello World!我是一个Hello World!"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

这样简单的实现就可以显示跑马灯效果。

但是在实际的开发中,页面的布局往往比较复杂,如果显示两个跑马灯的文字,这种方法只能实现第一个,第二个不会出现效果。采用如下方法:

    首先我们写一个类,继承TextView这个类,实现它的构造方法,重写isFocused方法 ,将它的返回值都为true,

package com.example.administrator.marqueetextview;

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.widget.TextView;

/**
 * Created by Administrator on 2018/3/8 0008.
 */

public class Marquee_Textview extends TextView {
    public Marquee_Textview(Context context) {
        super(context);
    }

    public Marquee_Textview(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public Marquee_Textview(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @Override
   public boolean isFocused(){
        return true;
   }
}

在页面中将textView换成我们自己的TextView,两个textview就都可以实现跑马灯的效果了。

<com.example.administrator.marqueetextview.Marquee_Textview
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是一个Hello World!我是一个Hello World!我是一个Hello World!我是一个Hello World!"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.example.administrator.marqueetextview.Marquee_Textview
        android:layout_marginTop="50dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是一个Hello World!我是一个Hello World!我是一个Hello World!我是一个Hello World!"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
实现原理:两个TextView,默认的是第一个获取焦点,第二个默认的是没有选中的。现在我们自己的TextView都是默认的强制的设置为被选中的状态的。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不染心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值