我有一个问题,我无法真正解决。我已经创建了一个图形应用程序,它将包含大量数据点的数据。为了能够在图形中滚动,我创建了图形数据的位图,并根据用户输入将位图移动/移动到屏幕的右侧或左侧。位图总是图形视图高度和图形视图宽度。当用户移动位图时,我移动位图:Android位图移位/移动问题
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
任何帮助,提示,建议都非常欢迎。
干杯 威廉
我不知道答案,但这里只是一个想法:你说的范围是0.5。 0.5与其屏幕有什么关系? 0.5是否足够大,实际移动超过1个像素?再次,只是一个随机的,毫无根据的想法。 –
是的,我想过这个。我真的不确定android是如何解决这个问题的,但是其他设备上的其他设备都可以正常工作,即使在其他Galaxy S上也可以使用stock ROM。我试图设置一个限制,所以位图移位必须> = 1,但这也会导致奇怪的问题。我用手机上的位图进行的所有操作似乎都不涉及到屏幕。 bitmapShift在我的手机上移动的最小值是0.454167。在股票星系s 0.918750。并不像我之前说过的那么近。今天继续... – user1842354