我使用以下代码仅淡入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>


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

最佳答案

注意:按钮的自定义范围不适用于棒棒糖及更高版本。所以有这个

 <Button
    android:textAllCaps="false"


我的自定义跨度

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 android - 在Android中仅淡入淡出按钮文字-LMLPHP

07-24 09:49
查看更多