我有一個問題,我無法真正解決。我已經創建了一個圖形應用程序,它將包含大量數據點的數據。爲了能夠在圖形中滾動,我創建了圖形數據的位圖,並根據用戶輸入將位圖移動/移動到屏幕的右側或左側。位圖總是圖形視圖高度和圖形視圖寬度。當用戶移動位圖時,我移動位圖: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