我有一个我无法真正解决的问题。我创建了一个图形应用程序,其中包含具有大量数据点的数据。为了在图形中启用滚动,我创建了图形数据的位图,并根据用户输入将位图移动/移动到屏幕的右侧或左侧。位图始终是图形视图高度和图形视图宽度。当用户移动位图时,我移动位图:
memoryCanvas.drawBitmap(memoryBitmap, bitmapShift, 0.0f, paint);
其中 shift 是一个包含移位值的浮点值。
现在,在我尝试过的大多数设备上,它都非常好用。我已经在 HTC Desire、Galaxy Tab 和 Galaxy S 上进行了尝试。但是,在我自己的 Galaxy S 上进行测试时,我得到了我无法解释的奇怪结果。请注意,我的 Galaxy S 包含一个自定义 rom(使用 android 4.0.4),所以这可能是我得到这种行为的原因,但我仍然无法理解或正确缓解它。
因此,在正常的用例行为中,位图按 bitmapShift 像素数移动,然后我通过正常的线条绘制填充空白区域。但是当使用我的手机时,向任一方向缓慢拖动位图,因此 bitmapShift 值在 0.5 左右,位图不移动,或者只是有时移动。我比较了其他平台上的bitmapShift,它们在相同的范围内,缓慢拖动时为0.5。这种行为当然会搞砸我的画。在快速拖动时也会发生这种情况,但在缓慢拖动时最明显。
我无法真正弄清楚导致这种行为的原因。位图不会根据我的 bitmapShift 值移动。它适用于我尝试过的所有其他平台。如果我跳过使用位图,只根据移位值绘制线条,一切正常。
有谁知道什么可能导致这种行为?坐了几天试图弄清楚后,我有点跑了。关键代码如下。这段代码在我的 onDraw 函数中。
memoryCanvas.setBitmap(emptyBitmap); //First set another bitmap to clear
memoryCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); //Clear it
memoryCanvas.drawBitmap(memoryBitmap, bitmapShift, 0.0f, paint); //Draw shifted bitmap on it
memoryCanvas.drawLines(lineDrawPoints, 0 , cnt, paint); //Draw remaining lines
memoryCanvas.setBitmap(memoryBitmap); //Set the original
memoryCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); //Clear original
memoryCanvas.drawBitmap(emptyBitmap, 0.0f, 0.0f, paint); //Draw the final image
canvas.drawBitmap(memoryBitmap, 0, 0.0f, paint); //And finally draw on real canvas
非常欢迎任何帮助、提示和建议。
干杯威廉