Android应用颜色到透明度动画

4

有没有一种方法可以在Android中对alpha动画应用颜色?我知道如何使用<alpha>元素,但我想让alpha除了透明度外还能应用颜色,这样我就可以突出显示布局。这是否可能?

2个回答

3

Android中的动画不能包含颜色变化--只能包含alpha、旋转、缩放和平移。

尽管如此,您仍然可以通过在彼此上叠加两个不同颜色的对象并淡入或淡出顶部对象来进行颜色变化。

您还可以查看TransitionDrawableTextSwitcher以实现类似的效果。希望我们能在未来的更新中获得对颜色动画的完全支持。


1

好的,这是我的解决方案,可以对屏幕的特定区域进行动画处理(请参见下面的演示)。请注意,此代码针对运行>= API9的设备。

enter image description here

适合初学者,只需复制粘贴即可。

FadeAnimationColored.java

public class FadeAnimationColored {

private View view;
private float maxBrightness = 1.0f;
private float minBrightness = 0.0f;
private long duration = 400L;
private long startOffset = 0L;
private int color = android.R.color.white;

// Constructors...

public FadeAnimationColored(View view, String color, float maxBrightness, float minBrightness, long duration, long startOffset) {
    this.view = view;
    this.color = Color.parseColor(color);
    this.maxBrightness = maxBrightness;
    this.minBrightness = minBrightness;
    this.duration = duration;
    this.startOffset = startOffset;
    prepareView();
}


public void fadeOut() {
    this.view.setAlpha(1f);
    Animation anim = new AlphaAnimation(minBrightness, maxBrightness);
    anim.setDuration(duration);
    anim.setStartOffset(startOffset);
    anim.setFillEnabled(true);
    anim.setFillAfter(true);
    view.startAnimation(anim);
}


public void fadeIn() {
    Animation anim = new AlphaAnimation(maxBrightness, minBrightness);
    anim.setDuration(duration);
    anim.setStartOffset(startOffset);
    anim.setFillEnabled(true);
    anim.setFillAfter(true);
    view.startAnimation(anim);
}


private void prepareView() {
    this.view.setBackgroundColor(this.color);
    this.view.setAlpha(0f);
}
}

在您的布局中添加一个额外的View,将其视为覆盖层(我使用了一个简单的FrameLayout,设置为match_parent)。
以下是演示如何在您的Activity或Fragment中设置动画的代码片段:
FrameLayout interceptorFrame = (FrameLayout) mView.findViewById(R.id.fl_interceptor);

final FadeAnimationColored fadeAnimationLayout =
        new FadeAnimationColored(interceptorFrame, MaterialColor.GREY_800, 0.9f, 0.0f, 400L, 0);

mFabMenu.setOnMenuToggleListener(new FloatingActionMenu.OnMenuToggleListener() {
    @Override
    public void onMenuToggle(boolean opened) {
        if (opened) {
            fadeAnimationLayout.fadeOut();
        } else {
            fadeAnimationLayout.fadeIn();
        }
    }
});

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