gpt4 book ai didi

Android:涉及硬件加速的奇怪问题?

转载 作者:行者123 更新时间:2023-11-29 14:00:58 37 4
gpt4 key购买 nike

我的应用允许用户通过捕获和处理触摸事件在屏幕上绘图。此外,我的应用程序使用了 Canvas.drawPicture 和其他一些不受硬件加速支持的方法。

在一些 ICS 设备上,有一个选项可以在设置中强制硬件加速:“强制 gpu 渲染,在应用程序中使用 2d 硬件加速”。启用此功能后,我的应用程序崩溃并出现错误:android.view.GLES20Canvas.drawPicture(GLES20Canvas.java:895)。因此,我在使用此方法的 View 上明确禁用了硬件加速:View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

但是,以这种方式禁用硬件加速会影响我的绘图性能,绘图变得“断断续续”,就好像生成的 MotionEvent.ACTION_MOVE 变少了。这发生在所有 3.0+ 设备上,无论“强制加速”设置是否打开。

因此,我认为 View 的 LayerType 中有一些东西在帮助我绘图,而当我调用 View.setLayerType(...) 时它丢失了。在调用 View.setLayerType(...) 之前,View.getLayerType() 的计算结果为 LAYER_TYPE_NONE。

关于如何在保留任何有助于我的触摸输入的内容的同时明确阻止硬件加速的任何建议?

最佳答案

通过将层类型设置为软件,您强制系统基本上将您的 View 绘制成位图。因此在绘图时会产生一些额外的开销。这可能是性能不佳的原因。我假设您的崩溃是由于使用了您正在执行的一些不受硬件加速支持的 Canvas api 调用。目前不支持以下调用:

  • 剪辑路径
  • 剪辑区域
  • 画图
  • 画点数
  • 绘制位置文本
  • 绘制文本路径
  • 绘制顶点

另请注意,当硬件加速处于 Activity 状态时,您绘制的任何线条都将呈现锯齿状,因为此时不支持抗锯齿。

因此您可以尝试删除任何不受支持的调用并使用硬件加速或尝试进一步优化您的软件渲染:

  • 不要在绘制调用期间创建路径或位图等对象
  • 将您的图片缓存到位图中
  • 将窗口的像素格式设置为 RGB565(仅当您不需要 alpha 时)

    getWindow().setFormat(PixelFormat.RGB_565);

关于Android:涉及硬件加速的奇怪问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9523780/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com