Shadow 在捕获 textview 的图像时被破坏。
我使用 setShadowLayer 以编程方式添加了文本阴影。
tv.setShadowLayer(20, 0, 0, Color.BLACK);
当我使用
拍摄图像时tv.buildDrawingCache(true);
tv.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
tv.setDrawingCacheEnabled(true);
并使用获取位图
bitmap = tv.getDrawingCache();
屏幕上的原始图像
捕获的图像
还 try catch 父布局但结果相同。
最佳答案
两个图像的区别在于原始图像是使用 LAYER_TYPE_HARDWARE
层生成的。当您使用此图层类型在文本上设置阴影图层时,模糊是由图形处理器在纹理上创建的。
请参阅 View layers 上的这篇文章了解详情。
另一方面,捕获的图像是通过渲染成位图来创建的,这与使用 LAYER_TYPE_SOFTWARE
基本相同。由于图形处理器不再创建模糊,因此无法保证它看起来会一样。
您可以尝试一下。添加代码强制软件渲染:
tv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
tv.setShadowLayer(20, 0, 0, Color.BLACK);
执行此操作后,这两个图像将看起来相同。
如果您希望这两个图像看起来更像带有硬件模糊的原始图像,您可以调整模糊半径:
tv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
tv.setShadowLayer(8, 0, 0, Color.BLACK);
如果您想通过捕获硬件渲染图像的位图来获得与原始图像完全相同的结果,那一定是可能的,但我不知道一个简单的方法。您可能必须使用 OpenGL 重写应用程序才能访问底层图形缓冲区。
关于android - 捕获图像时TextView阴影被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39227328/