Android 如何在SurfaceView中禁用硬件加速?

Android 如何在SurfaceView中禁用硬件加速?,android,surfaceview,shadow,hardware-acceleration,Android,Surfaceview,Shadow,Hardware Acceleration,我有一个“确切”的问题: 我有一个玩家和敌人,我用14个API编译。问题是:从14 API开始,默认情况下启用硬件加速,并且并非所有绘图方法都支持硬件加速(例如,我要使用的setShadowLayer()。因此,解决方案很简单,就像上面主题中介绍的一样。问题是:他使用一个视图,我使用一个SurfaceView来提高游戏性能。我的曲面视图声明如下: public class Screen extends SurfaceView implements Runnable { // Code } 因

我有一个“确切”的问题:

我有一个玩家和敌人,我用14个API编译。问题是:从14 API开始,默认情况下启用硬件加速,并且并非所有绘图方法都支持硬件加速(例如,我要使用的setShadowLayer()。因此,解决方案很简单,就像上面主题中介绍的一样。问题是:他使用一个视图,我使用一个SurfaceView来提高游戏性能。我的曲面视图声明如下:

public class Screen extends SurfaceView implements Runnable { // Code }
因此,我刚刚添加到构造函数中:

public Screen(Context context) {
    super(context);
    holder = getHolder();
    setLayerType(View.LAYER_TYPE_SOFTWARE, null); // Here.
}

在我的SurfaceView上禁用硬件加速以使我的阴影看起来不难看,结果是:整个SurfaceView停止工作。我无法显示发生了什么,但当我禁用硬件加速时,它不会显示任何内容。我对此相当悲观,因为似乎SurfaceView本身取决于硬件加速,但画布在被拉入时无法使阴影正常工作。

根据
SurfaceView
的说法,它根本没有硬件加速,因此,您的问题可能在其他地方。

如果您使用软件渲染,您将放弃很多性能,尤其是在现代设备上。无论如何,在SurfaceView的表面上禁用加速度可能是不可能的——注意,其中说不能禁用窗口的加速度。您是否尝试过禁用整个活动或应用程序的加速功能?是的,我也尝试过这一部分。这没用,阴影看起来仍然很难看。我决定放弃阴影质量,等待谷歌修复。我之前的评论是不正确的。正如@Shell的回答中所指出的,使用lockCanvas()从SurfaceView的曲面获得的画布不是硬件加速的。很容易判断——只要在锁定曲面后调用
Canvas\isHardwareAccelerated()
。我刚刚在
SurfaceView上试用了它,确认它不是硬件加速的。