如果您使用自己的布局,只需将容器更改为RelativeLayout(或继承自的Layout类RelativeLayout),并将颜色叠加层放在主布局之后.您只需要添加一个View并设置它的背景和alpha.alpha设置为值1将激活此叠加,而设置alpha为0将恢复正常.
例:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- add your views here -->
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#8000FF00" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
这将覆盖具有50%alpha的绿色图层,而不是布局中位于其之前的其他视图.
好的,我做了一些更多的研究.这就是我最终提出的:
// prepare a gray filter setting saturation to 0, or ...
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
Paint paint = new Paint();
ColorFilter filter = new ColorMatrixColorFilter(cm);
// ... prepare a color filter
ColorFilter filter = new PorterDuffColorFilter(Color.rgb(34, 136, 201), PorterDuff.Mode.OVERLAY);
// create paint
paint.setColorFilter(filter);
// override dispatchDraw of the view
@Override
protected void dispatchDraw(Canvas canvas) {
if (isPressed()) {
canvas.saveLayer(null, paint, Canvas.ALL_SAVE_FLAG);
super.dispatchDraw(canvas);
canvas.restore();
} else {
super.dispatchDraw(canvas);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7550 次 |
| 最近记录: |