我也没有解决根本问题,但我想出了另一个不完美的解决方法,它不会给你的代码增加延迟。首先在画布上绘制一个虚拟对象。然后绘制您的动画对象(或可拖动对象。因为它也发生在拖动时)。似乎第一个绘制的对象是持久的(即无法正确清除)。使用 KineticJs,我执行以下操作... 1.) 创建舞台,2.) 绘制对象(如舞台大小的矩形作为背景。注意对象不能是透明的),3.)将图层添加到舞台,然后 4.) 运行 layer.draw()。
之后,我可以在画布上绘制任何东西,并且它在 Android 中表现正常。(见下面的例子。没有背景,对象在第一次拖动时被复制。要测试它,只需将背景的不透明度设置为 0)。
一个警告:根据我目前的经验,这发生在任何给定层中的第一个对象上。所以我必须调整舞台中的每一层。根据您的应用程序,它可能会或可能不会比在代码中添加时间延迟更好。
这似乎是从 Android 4.1.x 开始的 Android 错误它在 4.0.x 中不会出现。并且在本周发出的最近升级到 4.1.2 中也没有修复。类似的问题与 CSS 中的 overflow-x 属性的设置有关(参见http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type% 20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=35474 )。
<script>
window.onload = function() {
var stage = new Kinetic.Stage({
container: "container",
width: 578,
height: 200
});
var boxLayer = new Kinetic.Layer();
stage.add(boxLayer);
var background = new Kinetic.Rect({
x: rectX,
y: rectY,
width: 578,
height: 200,
fill: "white",
stroke: "white",
strokeWidth: 4,
draggable: false
});
boxLayer.add(background)
boxLayer.draw();
var rectX = stage.getWidth() / 2 - 50;
var rectY = stage.getHeight() / 2 - 25;
var box = new Kinetic.Rect({
x: rectX,
y: rectY,
width: 100,
height: 50,
fill: "#00D2FF",
stroke: "black",
strokeWidth: 4,
draggable: true,
opacity: 1.0
});
boxLayer.add(box);
boxLayer.draw();
};
</script>