2010-07-14 57 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(); 
     } 
    } 
});