是否有一种简单的方法可以设置ViewGroup
的内容(子)的透明度?
背景:我有一个自定义FrameLayout
,其中包含许多不同的视图。现在我想淡出内容/孩子:
backgroundColor
应该始终可见 - 因此我不能只setAlpha()
整个ViewGroup
child.setAlpha()
当前方法
它正在运作但我并不完全满意 - 我认为有一个更简单的解决方案。
覆盖dispatchDraw()
并在所有内容上方绘制一个矩形:
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
// Draw the alpha overlay above the children.
if (mGridAlpha < 1.0f) {
mOverlayPaint.setColor(adjustAlpha(mOverlayPaint.getColor(), 1 - mGridAlpha));
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), mOverlayPaint);
}
}
public static int adjustAlpha(int color, float factor) {
int alpha = Math.round(255 * factor);
int red = Color.red(color);
int green = Color.green(color);
int blue = Color.blue(color);
return Color.argb(alpha, red, green, blue);
}
淡入/淡出是通过ValueAnimator
:
public void fadeContent(final boolean in) {
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mGridAlpha = in ? fraction : 1 - fraction;
// Key here is to call invalidate() which will cause a dispatchDraw() call
invalidate();
}
});
animator.start();
}