android - 捕获图像时TextView阴影被破坏

标签 android textview shadow

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();

屏幕上的原始图像

enter image description here

捕获的图像

enter image description here

还 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/

相关文章:

android - 如何在与父级底部对齐的 CardView 上添加阴影

Android - 使用 Android Studio 和 Gradle 的 httpcore 和 httpmime Proguard

android - 在文本中设置渐变

java - 在java中设置TextView宽度

Android textview 的view bounds 比content 大很多,如何去掉?

CSS淡出没有图像的水平规则/线条样式的div效果

Android:支持未显示自定义布局的 DialogFragment

android快捷方式,快捷方式 Intent 可以额外包含应用程序对象吗?

java - 执行 View 切换时无法在ViewAnimator中实现动画效果

ios - UINavigationBar 在 AppDelegate.swift 中设置自定义阴影