OpenGLRenderer问题:路径太大而无法渲染到纹理

时间:2014-12-12 13:09:14

标签: android canvas opengl-es hardware-acceleration

我在TextView内有ReleativeLayout,我在运行时将大文本设置为ReleativeLayout。 问题出在我的12-12 16:26:56.602: W/OpenGLRenderer(7400): Path too large to be rendered into a texture 背景上,这是一个带边框的圆形。它没有设置背景,在Logcat中它说:

12-12 16:37:05.717: E/AndroidRuntime(9520): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@4633e3f8 

我已经通过在清单文件中将 android:hardwareAccelerated 变为false来解决了这个问题(一个活动不是整个应用程序),但是当我在我的Activity中使用滑动菜单时它会引发另一个错误那个:

{{1}}

我的SlidingMenu里面只有一个没有任何位图的ListView,它是6Wunderkinder SlidingLayer库。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:16)

最后通过将我的Fragment ScrollView的LayerType从HardwareAcceleration更改为Software来解决它,而没有为整个Activity设置HardwareAcceleration false,导致SlidingMenu中提到的奇怪的行为:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layerType="software">

答案 1 :(得分:3)

当我的滚动视图太长而根视图中有一个drawable时,这种情况发生在我身上,这会对每个设备产生唯一影响。我的Nexus 9将展示最多的东西,但我的索尼紧凑型不会。关闭硬件加速是不值得的,因为在低端设备上你可能会有一个非常不稳定的应用程序。

在这种情况下,您应该考虑使用listview或recyclerview来确保您的背景元素不大于屏幕。即使是不太长的scrollview背景中的XML drawable也会产生这个错误。我选择安全并重新设计元素,简单地从scrollview中删除背景可以是一个选项,并将它们作为瓷砖放在内部元素中。

这看起来很奇怪,但它必须与更长滚动视图中的根视图如何呈现背景有关,因为滚动视图本身可能很长,许多复杂元素没有问题,背景颜色也是如此从来没有问题..

答案 2 :(得分:3)

如果您想以编程方式执行此操作,可以设置:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);