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

时间:2015-11-09 17:21:57

标签: android android-layout android-canvas android-view

所以这是我想要做的奇怪的事情,在我的应用程序中看起来很神奇,但对于我的生活无法弄清楚如何。

让我说我的屏幕背景如下:

然后我添加一个视图,可以包含任意数量的子视图/内容。这种观点自然掩盖了背景:

到目前为止一切顺利。现在是棘手的部分。我想实施一些能让我看到"通过"这个观点的一部分。从本质上讲,它会使视图看起来不可见,但仅限于一个特定区域。这是它的样子:

到目前为止,我还没有找到任何办法。

2 个答案:

答案 0 :(得分:2)

您可以使用Bitmap Masking技术来完成您想要的任务。您的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


欲了解更多信息,请阅读:https://stackoverflow.com/a/33483016/4747587

答案 1 :(得分:0)

亨利提到了一个很好的解决方案。另一个简单的解决方案通常是使用PNG-drawable或9-patch-drawable。如果叠加的区域始终相同,则PNG为您提供了透明的完全灵活性,其余部分在您定义时保持不变。您可以缩放PNG或 - 如果您只想缩放特定区域,请使用9-patch-drawable。