Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

ある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にはインタフェースの型をもつオブジェクトが入っています。で、状態によって切り替えてる感じです。

とりあえずメモ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした