2010-07-14 54 views
4

有没有办法将颜色应用于android中的alpha动画?我知道如何使用<alpha>元素,但我希望alpha可以应用一种颜色以及一个alpha,这样我就可以高亮布局。这可能吗?android将颜色应用于alpha动画

回答

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

下添加一个额外的查看到你的布局,把它作为一个覆盖(我用了一个简单的FrameLayout被设置为match_parent

这里是一个显示如何在活动或片段中设置动画的片段:

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