Android视图剪辑/减去

时间:2016-07-19 14:49:54

标签: android xml view overlap clip

在Android(从API 15)中有什么方法可以剪辑/减去像在photoshop中屏蔽的视图吗?

请参阅以下示例: https://s31.postimg.org/d18lktjq3/index.jpg

红色视图只是一个大胆有趣的V形,而蓝色视图则更复杂。 请注意,在红色视图中,条纹部分是透明的。 我想获得的结果视图,就像蓝色的大视图,第二个视图的V形,以及任何上面的切割。

请注意,在最终结果中,V形“内部”的空间必须是透明的。

目前我使用两个视图一个接一个地填充这个效果(填充V形视图中的间隙),但这不是最佳的,因为我必须确切地知道另一个视图是什么,并总结视图比源大。

谢谢

1 个答案:

答案 0 :(得分:0)

在Android中,这是使用 Porter-Duff传输模式完成的。

最好的方法是使用两个叠加位图:一个具有红色V形,一个互补位图,代表您想从下层切出的所有内容。

使用自定义视图,您可以覆盖onDraw()来执行以下步骤:

  • 绘制基础(蓝色)位图
  • 使用Porter-Duff模式SRC_OVER
  • 绘制红色条纹
  • 使用Porter-Duff模式CLEAR
  • 绘制顶部V剪切块

代码看起来像这样(假设你已经创建了位图并计算了你想要绘制它们的x,y坐标):

    Paint paint = new Paint();
    paint.setAntiAlias(true);

    canvas.drawBitmap(blue_base, blueX, blueY, paint); 

    // draw the red v on top of the blue part
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
    canvas.drawBitmap(red_v, redX, redY, paint);

    // erase the unwanted pixels from the blue part
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    canvas.drawBitmap(cut_out, redX, redY, paint);

这是一个有趣的教程,可以帮助您入门:Punch a hole in a bitmap by using Android's porter-duff Xfer - TechRepublic

相关问题