Window弹框实现跑马灯效果

2022-10-02  本文已影响0人  还是做个码农

第一种方式:在布局文件中设置focusable和focusableInTouchMode为true后即可实现跑马灯效果。

 <TextView
        android:id="@+id/tv_marquee"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="测试跑马灯效果,设置focusableInTouchMode"
        />

第二种方式:
自定义MarqueeTextView,重写isFoucused()方法,强制返回true。TextView只有获得焦点才能实现跑马灯效果
自定义MarqueeTextView代码如下:

package com.example.myapplication;

import android.content.Context;
import android.util.AttributeSet;

public class MarqueeTextView extends androidx.appcompat.widget.AppCompatTextView {
    public MarqueeTextView(Context context) {
        super(context);
    }

    public MarqueeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 需要获得焦点才能实现跑马灯效果
     */
    @Override
    public boolean isFocused() {
        return true;
    }
}

需要设置ellipsize属性为"marquee",同时设置单行显示,marqueeRepeatLimit属性设置循环次数,"marquee_forever"为无效循环。

    <com.example.myapplication.MarqueeTextView
        android:layout_width="100dp"
        android:text="测试跑马灯效果,自定义MarqueeTextView"
        android:singleLine="true"
        android:textColor="@android:color/black"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        />

TextView需要获得焦点才能有跑马灯效果,当获取不到焦点则无跑马灯效果。

上一篇 下一篇

猜你喜欢

热点阅读