本当に解決できない問題があります。多くのデータポイントを持つデータを含むグラフアプリを作成しました。グラフのスクロールを有効にするには、グラフ データのビットマップを作成し、ユーザー入力に応じてビットマップを画面の右または左にシフト/移動します。ビットマップは常にグラフ ビューの高さとグラフ ビューの幅です。ユーザーがビットマップを移動すると、ビットマップを次のようにシフトします。
memoryCanvas.drawBitmap(memoryBitmap, bitmapShift, 0.0f, ペイント);
ここで、shift はシフト値を含む float 値です。
今、私が試したほとんどのデバイスで、これは非常にうまく機能します。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
ヘルプ、ヒント、提案は大歓迎です。
乾杯ヴィルヘルム