TextView详解(阴影+跑马灯)

本文介绍了如何在Android开发中通过自定义TextView实现带阴影效果的跑马灯,包括设置阴影属性、使用XML和Kotlin/Java代码详解。重点展示了如何使TextView在无需点击的情况下自动播放。
摘要由CSDN通过智能技术生成

一、常用基础属性

属性名属性作用可选值
layout_width组件的宽度wrap_content(根据内容分配空间)、match_parent(与所处容器同宽)、固定值(单位一般为dp)
layout_height组件的高度组件的宽度
id设置组件id@+id/控件id名称(为控件添加一个id)
text设置显示文本内容即要显示的文本
textStyle设置字体样式bold(加粗)、italic(斜体)、normal(正常)
textColor设置字体颜色颜色代码
textSize设置字体大小单位一般为sp
background控件背景,颜色或图片颜色代码或图片链接
gravity设置控件中内容对齐方向top、bottom、start、end、center等,可使用|符号来同时指定多个值

二、带阴影的TextView

属性名属性作用
shadowColor设置阴影颜色,需要与shadowRadius一起使用
shadowRadius设置阴影的模糊程度
shadowDx设置阴影在水平方向的偏移
shadowDy设置阴影在竖直方向的偏移

通过设置这些属性就可以完成对TextView阴影效果的实现。

三、实现跑马灯效果

属性名属性作用
singleLine内容单行显示
focusable是否可以获取焦点
focusableInTouchMode用于控制视图在触摸模式下是否可以聚焦
ellipsize在哪里省略文本
marqueeRepeatLimit控制跑马灯的次数,值可以是数值,也可以是marquee_forever(永久)
clickable是否可点击
1、使用xml实现跑马灯(需要点击)

使用TextView的属性实现简单的跑马灯,但是需要手动点击才能开始跑:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/t1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="50dp"
        android:textColor="@color/c1"
        android:textStyle="italic"
        android:shadowColor="@color/c2"
        android:shadowRadius="3.0"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:text="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:clickable="true"
        />
</LinearLayout>
2、利用自定义TextView

首先是xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">

    <com.example.textview01.MyTV
        android:id="@+id/t1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="50dp"
        android:textColor="@color/c1"
        android:textStyle="italic"
        android:shadowColor="@color/c2"
        android:shadowRadius="3.0"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:text="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

        />
</LinearLayout>

xml中直接删除掉了原本的用于实现跑马灯的属性,下面直接使用自定义TextView来实现跑马灯

①kotlin代码
class MyTV(context: Context?, attrs: AttributeSet?) : AppCompatTextView(context, attrs) {
    init{
        setSingleLine()
        ellipsize = TextUtils.TruncateAt.MARQUEE
        marqueeRepeatLimit = -1
    }
    override fun isFocused(): Boolean {
        return true
    }
}
②java代码
public class MyTextView extends AppCompatTextView {
    public MyTextView(Context context) {
        super(context);
    }

    public MyTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        // android:singleLine="true"
        setSingleLine();
        // android:ellipsize="marquee"
        setEllipsize(TextUtils.TruncateAt.MARQUEE);
        // android:focusable="true"
        setFocusable(true);
        // android:focusableInTouchMode="true"
        setFocusableInTouchMode(true);
        // android:marqueeRepeatLimit="marquee_forever"
        setMarqueeRepeatLimit(-1);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

至于一些更加细致关于自定义TextView实现跑马灯的内容可以看大佬博客:点击这里

③XML使用xml实现跑马灯(无需点击)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/t1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="50dp"
        android:textColor="@color/c1"
        android:textStyle="italic"
        android:shadowColor="@color/c2"
        android:shadowRadius="3.0"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:text="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:clickable="true"
        >
        <requestFocus />
    </TextView>

</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅梦曾倾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值