在Android中,Fadein仅显示按钮文本

在Android中,Fadein仅显示按钮文本,android,android-layout,animation,button,Android,Android Layout,Animation,Button,我使用以下代码仅淡入按钮文本。但它给出了整个按钮的fadein Animation animationFadeIn = AnimationUtils.loadAnimation(this, R.anim.fade_in); //register btn listener m_btn_register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(

我使用以下代码仅淡入
按钮
文本。但它给出了整个
按钮的fadein

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);

        }
    });
淡入.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>


实现这一点的正确方法是什么?

将代码更改为这种方式

<?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
gloabal.

我认为没有使用Animation API的解决方案,因为它在视图上工作,并且不考虑它的内容

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


之后,仅为按钮制作动画。

注意:对棒棒糖和更高版本的按钮使用自定义跨距不起作用。这个也有

 <Button
    android:textAllCaps="false"
自定义属性

 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();
    }
};

Gif

可能的重复您希望文本的每个字符都淡入吗?没有像
这样的完整文本这是我的字符串
好的。这可以通过Spanable字符串完成。让我把我的解决方案贴出来吧。我会检查的。这也是动画整个视图。我只需要动画按钮文本我看到你的输出捕捉。这正是我想要的。非常感谢。我会在星期一检查,然后我会确认你。酷。我几个小时前就有了解决办法。我面临的唯一问题是不能吃棒棒糖或更高的东西。所以我被卡住了。后来我才知道,在棒棒糖中,他们去掉了按钮上的自定义跨距,以符合材料设计准则。别忘了检查一下便条。同时检查你的目标api。我的目标是棉花糖。不可能?有效。但必须添加

 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();

        }
    });