LoginSignup
3
3

More than 5 years have passed since last update.

AChartEngineでグラフ線が消える場合がある解決方法

Posted at

あるAndroidアプリ開発で、AChartEngineを使用していたのですが、スクロールすると、いきなりグラフの線が消えて、プロットだけの表示になってしまう問題が発生してました。
解決にちょっと苦戦したので、メモしておきます。

最初は、安定のStack Overflowを見て、こうすればいいのかとやってみたけどうまくいきませんでした。詳しくは以下のURLを参照してください。
android:hardwareAccelerated="false"View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

AchartEngine when zooming in linechart lines dissapear - Stack Overflow

これ以外の、解決方法がなかなか見つからずにけっこう悩んでましたが、ちょっと意外な場所が原因でした。

本アプリでは

AChartEngineクラス
//changeRenderingModeメソッド
protected XYMultipleSeriesDataset dataset;
XYSeries newSeries = new XYSeries(title);
dataset.addSeries(newSeries);

のようにしてdatasetにXYseriesのオブジェクトを入れていたのですが、これだとグラフに描画されていないときには、周りの文字サイズ等のプロパティは適応されません。だから

AChartEngineクラス
//changeRenderingModeメソッド
protected XYMultipleSeriesDataset dataset;
XYSeries newSeries = new XYSeries(title);
newSeries.add(1, 1);
dataset.addSeries(newSeries);

みたいな感じで初期値を追加していました。ちなみにchangeRenderingModeメソッドはグラフのモードを切り替えるメソッドです。

グラフ線が消えるのは、これが原因だったみたいです。。。

最初に追加したものはグラフ生成前にちゃんと消さないと、グラフのプロットが2つ被ってしまい、おかしな挙動をしてしまうみたいです。(消さないでも0.01とかにしても大丈夫です。被らなければ。ただ点が重なって気持ち悪いです。)

詳しい原因はちょっと分かっていませんが、これをグラフ生成前に消すことで解決しました。

今回は開始ボタンを押すと動的にグラフが描画されて、スピナーで複数のグラフや測定データを切り替えたりしていのたで以下の様な感じにしました。

開始ボタンのあるクラス(ViewとかViewModel)
selectedGraph.clearData();
インタフェースの実装ファイル
    @Override
    public void clearData(){
        if( this.dataset.getSeries().length > 0 ) {
            this.dataset.getSeriesAt(0).clear();
        }
    }

selectedGraphにはインタフェースの型をもつオブジェクトが入っています。で、状態によって切り替えてる感じです。

とりあえずメモ。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3