【问题标题】:Issue On OpenGLRenderer : Path Too Large To Be Rendered To a TextureOpenGLRenderer 上的问题:路径太大而无法渲染到纹理
【发布时间】:2015-02-11 04:59:42
【问题描述】:

我在ReleativeLayout 中有一个TextView,我在运行时将一个大文本设置到其中。 问题是关于我的ReleativeLayout 背景,它是一个带边框的圆形。它没有设置背景,在 Logcat 中它说:

12-12 16:26:56.602: W/OpenGLRenderer(7400): Path too large to be rendered into a texture

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

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: android canvas opengl-es hardware-acceleration


    【解决方案1】:

    最后解决了这个问题,只需将我的 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">
    

    【讨论】:

    • 这并不能完全解决问题。答案没有考虑可能的性能后果。
    • 如果有的话,我看到使用软件 layerType 提高了性能 - 大概禁用硬件纹理渲染对我测试的六台低端和高端设备没有不利影响。
    • 在将我们的 2009 应用程序转换为 Target 26 时遇到了困难。所有图形都出现了问题。在紧要关头修复它!
    【解决方案2】:

    当我的滚动视图太长且根视图中有可绘制对象时,我会发生这种情况,这会对每个设备产生唯一影响。我的 Nexus 9 会显示大部分内容,但我的索尼紧凑型不会。关闭硬件加速是不值得的,因为在低端设备上你可能会有一个非常不稳定的应用程序。

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

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

    【讨论】:

      【解决方案3】:

      如果你想以编程方式进行,你可以设置:

      view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-18
        • 2021-06-16
        • 2010-11-20
        • 2014-05-03
        相关资源
        最近更新 更多