该项目是用 as3 编写的,使用 AIR 28.0 打包,并在 Android 7 设备上运行(在 Windows 桌面环境中运行时运行良好)。
在我的 Android 7 (S7) 上,被 scrollRect 从视图中隐藏的对象仍在接收鼠标事件,但当我在桌面环境中运行相同的应用程序时却没有。
这是 Android 还是 AIR 错误?还是我做错了什么?
例子:
EDIT: (Original code example was incomplete see edit below)
var button:Sprite = new Sprite();
button.graphics.beginFill(0x00FF11, 1);
button.graphics.drawRect(0, 0, 50, 50);
button.graphics.endFill();
addChild(button);
button.addEventListener(MouseEvent.CLICK, buttonClick);
var outer:Sprite = new Sprite();
var square:Sprite = new Sprite();
outer.cacheAsBitmap = true;
outer.addChild(square);
var rect:Rectangle = new Rectangle(0, 0, 50, 50);
outer.scrollRect = rect;
addChild(outer);
outer.y = 50;
square.graphics.lineStyle();
square.graphics.beginFill(0x000000, 1);
square.graphics.drawRect(0, 0, 100, 100);
square.graphics.endFill();
square.addEventListener(MouseEvent.MOUSE_DOWN, squareDown);
square.y = -50;
在此示例中,在内部对象中绘制的矩形仅在 outer.scrollRect 中可见(因此是 50x50 而不是 100x100),并且按钮对象在其上方可见。当可见按钮上发生单击事件时,将触发 innerClick 事件,而不是 buttonClick 事件。
似乎被应用的 scrollRect 隐藏的内部容器的不可见部分仅在视觉上隐藏并且仍然阻止输入事件。
该应用程序正在通过我的 IDE (Flash Builder) 进行编译和安装。我尝试了不同版本的 IDE 和 AIR SDK,结果相同。
任何帮助将不胜感激。
编辑:
我发现了 scrollRect 正常工作的实例,因此进行了进一步测试以缩小错误范围。
删除线:
outer.cacheAsBitmap = true;
...解决了这个问题。将 cacheAsBitmap 应用于方形对象本身也仍然可以正常工作。
出于某种原因,将 cacheAsBitmap 应用于具有 scrollRect 的对象会导致此错误,但将 cacheAsBitmap 应用于更下游的子对象可以正常工作。
我没有足够的经验来了解性能影响或为什么建议使用 scrollRect 将 cacheAsBitmap 添加到对象中。也许其他人可以告知。