Android 如何使视图的一部分不可见?

Android 如何使视图的一部分不可见?,android,android-layout,android-canvas,android-view,Android,Android Layout,Android Canvas,Android View,所以这是我想做的一件奇怪的事情,在我的应用程序中看起来会很神奇,但对于我的生活来说,我不知道怎么做 假设我的屏幕上有这样一个背景: 然后我向它添加一个视图,该视图可以有任意数量的子视图/内容。此视图自然会遮挡背景: 到目前为止还不错。现在是棘手的部分。我想实现一些东西,让我能够“看穿”这个视图的一部分。本质上,它将使视图看起来不可见,但仅在一个特定区域内。下面是它的样子: 到目前为止,我还没有找到任何方法来实现这一点。您可以使用位图屏蔽技术来实现您想要的功能。在onDraw()方法中类似于

所以这是我想做的一件奇怪的事情,在我的应用程序中看起来会很神奇,但对于我的生活来说,我不知道怎么做

假设我的屏幕上有这样一个背景:

然后我向它添加一个视图,该视图可以有任意数量的子视图/内容。此视图自然会遮挡背景:

到目前为止还不错。现在是棘手的部分。我想实现一些东西,让我能够“看穿”这个视图的一部分。本质上,它将使视图看起来不可见,但仅在一个特定区域内。下面是它的样子:


到目前为止,我还没有找到任何方法来实现这一点。

您可以使用
位图屏蔽技术来实现您想要的功能。在
onDraw()
方法中类似于以下内容

    Paint paint = new Paint();
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    setLayerType(LAYER_TYPE_HARDWARE,paint); // if hardware acceleration is on
    // canvas.saveLayer(0, 0, canvas.getWidth(), canvas.getHeight(), paint); // Use this if hardware acceleration is off.
    canvas.drawRect(200, 200, 400, 400, paint); // This will be HOLE in the VIEW


要了解更多信息,请阅读以下内容:

亨利提到了一个很好的解决方案。另一个简单的解决方案通常是只使用PNG可绘制或9-patch可绘制。如果覆盖区域始终相同,则PNG将为您提供完全的灵活性,使您可以拥有透明的覆盖区域,其余区域将保留为您定义的覆盖区域。您可以缩放PNG,或者-如果您只想缩放特定区域,请使用9-patch-drawable