【android】 Textview文字改变时强调效果,Java和Kotlin分别实现

可以使用 SpannableString 类来实现 Android 文字改变时强调效果。SpannableString 可以在一个字符串中添加多个样式,例如不同颜色、字体、下划线、删除线等。以下是一个示例代码段,可以将文本的前三个字符变为蓝色加粗字体:

Java

String text = "这是一段示例文字";
SpannableString spannableString = new SpannableString(text);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.BLUE);
StyleSpan styleSpan = new StyleSpan(Typeface.BOLD);
spannableString.setSpan(colorSpan, 0, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(styleSpan, 0, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

Kotlin

val text = "这是一段示例文字"
val spannableString = SpannableString(text)
val colorSpan = ForegroundColorSpan(Color.BLUE)
val styleSpan = StyleSpan(Typeface.BOLD)
spannableString.setSpan(colorSpan, 0, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
spannableString.setSpan(styleSpan, 0, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
textView.text = spannableString

在这个示例中,我们使用了 ForegroundColorSpanStyleSpan 来分别设置文字颜色和字体样式,然后使用 setSpan() 方法将它们应用到字符串的前三个字符上。最后,将 SpannableString 对象设置到 TextView 中即可。

短暂强调后恢复为正常文字

Java

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        String originalText = "这是一段示例文字";
        textView.setText(originalText);
    }
}, 3000);

Kotlin

Handler().postDelayed({
    val originalText = "这是一段示例文字"
    textView.text = originalText
}, 3000)

动画实现

实现 TextView 内容变化监听,文本颜色进行渐变效果,可以通过监听文本内容的变化事件,然后在变化时创建动画实现颜色渐变效果。具体实现步骤如下:

  1. 定义一个 TextView 对象,并设置需要实时变化颜色的文本内容。
  2. 为 TextView 对象设置 TextWatcher 文本变化监听器。
  3. 在 TextWatcher 的三个回调方法中,记录文本内容的变化状态,并在 afterTextChanged() 方法中创建 ValueAnimator 动画对象,实现颜色变化渐变效果。

示例代码如下:

TextView textView = findViewById(R.id.text_view);
String text = "Hello World!";
textView.setText(text);

final int[] colors = {Color.parseColor("#FF0000"), Color.parseColor("#00FF00"), Color.parseColor("#0000FF")};
final int duration = 1000;
TextWatcher textWatcher = new TextWatcher() {
    private CharSequence beforeTextChanged;
    private CharSequence onTextChanged;
    private boolean textChanged = false;
    
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        beforeTextChanged = s;
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        onTextChanged = s;
        textChanged = true;
    }

    @Override
    public void afterTextChanged(Editable s) {
        if (textChanged) {
            ValueAnimator valueAnimator = ValueAnimator.ofArgb(colors);
            valueAnimator.setDuration(duration);
            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    int color = (int) animation.getAnimatedValue();
                    textView.setTextColor(color);
                }
            });
            valueAnimator.start();
            textChanged = false;
        }
    }
};
textView.addTextChangedListener(textWatcher);

在以上代码中,我们首先通过 findViewById() 方法获取需要监听的 TextView 对象,然后设置需要实时变化的文本内容。接着,我们创建了一个长度为 3 的颜色值数组 colors 和一个动画时长 duration。在设置 TextWatcher 的回调方法时,我们记录了文本内容的变化状态,并在 afterTextChanged() 方法中创建 ValueAnimator 动画对象,设置颜色值数组 colors,以及动画时长 duration。在动画更新监听器中,我们根据动画的当前值设置文本的颜色。

当文本内容变化时,TextWatcher 的 onTextChanged() 方法会被触发,我们记录下文本内容变化后的值 inTextChanged,设置 textChanged 为 true,表示有新的文本内容需要渐变颜色。在调用完 setText() 方法后,TextView 会再次调用 textWatcher.afterTextChanged() 方法,此时触发渐变颜色动画。

需要注意的是,以上代码中的颜色渐变效果是从开始到结束进行循环的。如果需要实现其他效果,比如只渐变指定的固定颜色,可以在代码中进行修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

全面解读

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

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

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

打赏作者

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

抵扣说明:

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

余额充值