在Android中仅淡入按钮文本

3
我使用以下代码来淡入Button的文本,但它会对整个Button进行淡入。
Animation animationFadeIn = AnimationUtils.loadAnimation(this, R.anim.fade_in);

//register btn listener
    m_btn_register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            m_btn_register.startAnimation(animationFadeIn);

        }
    });

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<alpha
    android:fromAlpha="0.1"
    android:toAlpha="1.0"
    android:duration="2000"
    />
</set>

如何正确实现这个?


可能是文本颜色动画的重复问题。 - Fabricio
您想要文本中的每个字符逐渐显现吗? - Raghunandan
不要像“这是我的字符串”这样的整个文本 - Sathish Kumar J
好的,请发表您的答案。我会检查的。 - Sathish Kumar J
我会在星期一检查,然后告诉你。 - Sathish Kumar J
显示剩余2条评论
3个回答

2
注意:在安卓5.0及以上版本中,自定义按钮样式的跨度无法正常显示。因此,请使用以下方法:
 <Button
    android:textAllCaps="false"

我的 CustomSpan

public class CustomSpan extends CharacterStyle implements UpdateAppearance {

    private int alpha;

    public int getAlpha() {
        return alpha;
    }

    public void setAlpha(int alpha) {
        this.alpha = alpha;
    }

    public CustomSpan() {

    }

    @Override
    public void updateDrawState(TextPaint paint) {
        paint.setAlpha(alpha);

    }
}

自定义属性

 private static final Property<CustomSpan, Integer> FADE_INT_PROPERTY
        = new Property<CustomSpan, Integer>(Integer.class, "FADE_INT_PROPERTY") {

    @Override
    public void set(CustomSpan span, Integer value) {
        span.setAlpha(value);
    }
    @Override
    public Integer get(CustomSpan object) {
        return object.getAlpha();
    }
};

那么

String text = button.getText().toString();

final CustomSpan span = new CustomSpan();
final SpannableString spannableString = new SpannableString(text);

int start = 0;
int end = text.length();
spannableString.setSpan(span, start, end, 0);
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ObjectAnimator objectAnimator = ObjectAnimator.ofInt(
                    span, FADE_INT_PROPERTY, 0, 255);
            objectAnimator.setEvaluator(new IntEvaluator());
            objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    button.setText(spannableString);
                }
            });
            objectAnimator.setDuration(10000);
            objectAnimator.start();

        }
    });

Gif 这里输入图片描述

以上内容是关于GIF的。

我看到了你的输出截图。这正是我想要的。非常感谢。我会在周一检查,然后再确认给你。 - Sathish Kumar J
很棒。我在几个小时前就找到了解决方案。我遇到的唯一问题是跨度在Lollipop及以上版本上无法工作。所以我卡住了。后来我知道,在Lollipop中,他们删除了按钮中的自定义跨度以符合材料设计指南。别忘了检查注释。还要检查你所针对的API。 - Raghunandan
我正在针对Marshmallow进行开发。这不可能吗? - Sathish Kumar J
运行正常。但必须添加 <Button android:textAllCaps="false"。请在帖子中阅读注释。 - Raghunandan

0

我认为使用动画 API没有解决方案,因为它只适用于视图,并不关心其内容。

所以,我认为您应该为按钮创建容器视图,并为新容器添加按钮背景。 然后将按钮背景设置为透明。

之后只需对按钮进行动画即可。


0

将您的代码更改为以下方式

<?xml version="1.0" encoding="UTF-8" ?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:duration="@android:integer/config_shortAnimTime"
           android:pivotX="50.0%"
           android:pivotY="50.0%"
           android:fromXScale="1.0"
           android:toXScale="0.9"
           android:fromYScale="1.0"
           android:toYScale="0.9"/>
    <alpha android:duration="@android:integer/config_shortAnimTime"
            android:fromAlpha="1.0"
            android:toAlpha="0.7"/>
</set>

还有一件事,声明全局 Animation


我需要对按钮文本进行动画,而不是整个视图进行动画。 - Sathish Kumar J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接