私はGraphViewAPIを使用しており、チャートを扱いにくいように実装しました。ユーザーがグラフに触れると、データポイントからグラフの下部に伸びる垂直線が表示されます。
onDrawメソッドで次のように線を作成しました。
mDrawable = new ShapeDrawable(new RectShape());
mDrawable.getPaint().setColor(0xFF363636);
mDrawable.setBounds((int)markerX,(int) (markerY) , (int)markerX+1, (int) height);
mDrawable.draw(canvas);
次のコードとマーカーの位置を計算するコードを使用して、onTouchメソッドの行を更新します。
invalidate(mDrawable.getBounds());
ドローアブルを移動しているときに問題が発生します。ジェスチャが十分に速い場合、更新が遅れる傾向があり、グラフ上で線が消えます(数分の1秒)。線は動きを維持しますが、消えます。それが理にかなっているなら、アイテムはその境界よりも速く動いているように見えます。
キャンバス全体を無効にすることはノーノーであり、変更したいものの境界を無効にすることが望ましいと聞きました(私が上で行ったこと)。キャンバス全体を無効にすると、線が消える現象は発生しませんが、アプリの動作が遅くなります。
私はSurfaceViewとサーフェスホルダーで魔法のようなことをしましたが、この場合、それらを使用することは逆効果のようです。私の理解では、私は基本的にinvalidate()メソッドを使用していますが、別のスレッドで使用しています。それでもすべてが何度も再描画され、逆効果のようです。
GraphViewライブラリ内で説明されている効果を実現する別の方法はありますか?