4

有没有办法将颜色应用于 android 中的 alpha 动画?我知道如何使用该<alpha>元素,但我想让 alpha 应用颜色以及 alpha,以便我可以突出显示布局。这可能吗?

4

2 回答 2

3

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

也就是说,您仍然可以通过将两个不同颜色的对象相互叠加并淡入或淡出顶部的对象来更改颜色。

您还可以查看TransitionDrawableTextSwitcher来完成类似的操作。希望我们能够在未来的更新中获得对彩色动画的全面支持。

于 2010-07-14T14:55:33.363 回答
1

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

在此处输入图像描述

初学者友好,只需复制和粘贴。

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

接下来为您的布局添加一个额外的视图,将其视为叠加层(我使用了一个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();
        }
    }
});
于 2015-12-04T19:26:35.917 回答