【发布时间】:2013-02-12 19:34:49
【问题描述】:
我需要实现以下组件,但不知道从哪里开始。
我有两个片段堆叠。顶部片段也有渐变背景和其他内容。下面的片段也有自己的内容,你应该可以看到下面的内容。
下图展示了情况,白色圆应该是可移动的,所以用户可以在特定位置看到下面的内容。
【问题讨论】:
我需要实现以下组件,但不知道从哪里开始。
我有两个片段堆叠。顶部片段也有渐变背景和其他内容。下面的片段也有自己的内容,你应该可以看到下面的内容。
下图展示了情况,白色圆应该是可移动的,所以用户可以在特定位置看到下面的内容。
【问题讨论】:
我推荐 Romain Guy 的解决方案。据我所知,这是最简单的(并且可能是自 he 推荐以来最有效的方法)。该解决方案基于Shaders。
您可以在这里找到代码、描述、整个项目、示例视频和屏幕截图:http://www.curious-creature.org/2012/12/13/android-recipe-2-fun-with-shaders/
您可以通过调整掩码 PNG 文件来开始您的自定义。然后你可能会为他们在绘制时使用的片段提供一个着色器参数。最后,您将在每次指针移动事件后为每个片段设置正确的着色器。
我知道这只是解决方案的一个草图,但上面链接中提供的整个项目代码应该会让你走得非常快。
【讨论】:
SpotlightView 将掩盖mTargetBitmap 中的任何内容。我可能会创建一个ViewGroup,它可以完成SpotlightView 的工作,但适用于所有儿童视图。它将覆盖onDraw() 并将它们绘制到mTargetBitmap。 然后它将使用这个位图像素作为掩码目标并应用掩码。这与SlidingDrawer 所做的类似——除了我们在屏蔽并且SD 是在剪辑——这在SlidingDrawer.dispatchDraw() 中可以看到。
target.setDrawingCacheEnabled(true) 时。当您需要获取目标位图时,只需调用target.getDrawingCache() - 目标将为您分配或修改位图。完成后致电target.setDrawingCacheEnabled(false)。
Fragment 有黑色背景,你可以透过白色圆形看到,而顶层对下面的内容一无所知。