Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
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にはインタフェースの型をもつオブジェクトが入っています。で、状態によって切り替えてる感じです。

とりあえずメモ。

h1kita
東京でソフトウェアエンジニアをしています。
smarthr
社会の非合理を、ハックする。
https://smarthr.co.jp/
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