android将颜色应用于alpha动画

时间:2010-07-14 14:45:46

标签: android animation colors alpha

有没有办法将颜色应用到android中的alpha动画?我知道如何使用<alpha>元素,但我希望alpha应用颜色和alpha以便我可以高亮显示布局。这有可能吗?

3 个答案:

答案 0 :(得分:3)

动画无法在Android中包含颜色变化 - 仅包含Alpha,旋转,缩放和翻译。

也就是说,你仍然可以通过将两个不同颜色的物体叠加在一起并使顶部的一个或多个褪色来进行颜色变化。

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

答案 1 :(得分:1)

我也在尝试alpha上同样的事情。但 http://nathanael.hevenet.com/android-dev-fading-background-animation/ 此链接可能会回答您的问题。 使用转换可能... :)

答案 2 :(得分:1)

嗯,这是我的解决方案动画屏幕的特定区域(请参阅下面的演示)。请注意,此代码定位的是运行&gt; = 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);
}
}

接下来为您的布局添加一个额外的视图,将其视为叠加层(我使用了设置为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();
        }
    }
});