3
我需要实现以下组件,但不知道从哪里开始。Android遮罩背景与圆形渐变形状
我有两个片段堆叠。顶部片段也具有渐变背景和其他内容。下面的片段也有自己的内容,你应该能够看到下面的内容。
下面的图片显示情况和白色的圆应该是可移动的,所以用户可以在一定位置上看到下面的内容。
我需要实现以下组件,但不知道从哪里开始。Android遮罩背景与圆形渐变形状
我有两个片段堆叠。顶部片段也具有渐变背景和其他内容。下面的片段也有自己的内容,你应该能够看到下面的内容。
下面的图片显示情况和白色的圆应该是可移动的,所以用户可以在一定位置上看到下面的内容。
我推荐罗曼盖伊的解决方案。据我所知这是最简单的(也可能是最有效的方法,因为他推荐它)。该解决方案基于Shader
s。
你可以在这里找到的代码,描述,整个项目,样品视频和截图:http://www.curious-creature.org/2012/12/13/android-recipe-2-fun-with-shaders/
你会通过调整掩模PNG文件中启动您的自定义。那么你可能会提供一个着色器参数,以便在绘制时使用它们的片段。最后,在每次指针移动事件之后,您将为每个片段设置适当的着色器。
我知道这只是解决方案的草图,但上面链接中提供的整个项目代码应该会让你的执行速度非常快。
我在使用这种方法时遇到了困难,因为它需要掩蔽的底部视图。是否有可能像黑色圆形PNG一样使用,并将其还原为白色,并在绘图中使用一些xfermode以使其工作? – Niko 2013-02-12 14:21:21
你是什么意思“需要掩盖底部视图”?我认为它没有。 'SpotlightView'将会掩盖'mTargetBitmap'中的任何东西。我可能会创建一个'ViewGroup'来完成'SpotlightView'的工作,但是对于所有的子视图。它会覆盖'onDraw()'并将它们绘制到'mTargetBitmap'。 *然后*它将使用这个位图像素作为掩码目标并应用掩码。这与'SlidingDrawer'的作用类似 - 除了我们正在屏蔽并且SD正在裁剪外 - 这可以在SlidingDrawer.dispatchDraw()中看到。 – andr 2013-02-12 14:48:57
但是如果聚光灯需要快速移动,那不就是因为它需要新的targetBitmap吗?或者是否应该将全视图作为目标位图并剪裁? – Niko 2013-02-12 15:03:10