ともちゃんのアプリ開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA/Kotlin、iOSのSwiftUIを習得して行きます。ともちゃんの備忘録も兼ねています。

グラフの再描画には、invalidate()を使用

グラフの再描画には、invalidate()を使用します。

グラフ描画のクラスのサンプルコードです。

private class GraphManager {

public GraphManager () {
};

public void displayGraph (TimeSeries series, float target, float min, float max ) {

if (target < min) min = target;
if (max < target) max = target;
float diff = max - min;
min = min - diff * 0.05f;
max = max + diff * 0.05f;

TimeSeriesCollection data = new TimeSeriesCollection(series);

AFreeChart chart =
ChartFactory.createTimeSeriesChart(
null, // グラフタイトル
null, // X軸ラベル
null, // Y軸ラベル
data,
false, // 凡例無し
false,
false);

// グラフの右側にマージンを持たせる。
RectangleInsets insets = new RectangleInsets(
0d, //・上
0d, //・左
0d, //・下
30d); //・右
chart.setPadding(insets);


XYPlot plot = chart.getXYPlot();
DateAxis xAxis = (DateAxis)plot.getDomainAxis();
ValueAxis yAxis = plot.getRangeAxis();

// Y軸の値の範囲を変える。
yAxis.setRange((double)min, (double)max);

// X軸の目盛間隔を変える。
xAxis.setTickUnit(new DateTickUnit(DateTickUnitType.DAY, 1, new SimpleDateFormat("M/d")));

// 軸の目盛のフォントを変える。
Font xyAxisFont = new Font(Typeface.SANS_SERIF, Typeface.BOLD, 25);
plot.getRangeAxis().setTickLabelFont(xyAxisFont);
plot.getDomainAxis().setTickLabelFont(xyAxisFont);

// 軸のタイトルのフォントを変える。
Font xyTitleFont = new Font(Typeface.SANS_SERIF, Typeface.BOLD, 25);
plot.getDomainAxis().setLabelFont(xyTitleFont);
plot.getRangeAxis().setLabelFont(xyTitleFont);

// Y軸のマーカーの表示
if (target !=0) {
Marker marker = new ValueMarker(target);
PaintType makerColor = new SolidColor(Color.rgb(180, 0, 180));
marker.setPaintType(makerColor);
marker.setStroke(5.0f);
marker.setLabel("目標値"); // マーカーラベルの指定
marker.setLabelFont(new Font(Typeface.SANS_SERIF, Typeface.BOLD, 25));
marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
marker.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
plot.addRangeMarker(marker);
}

// 折れ線の太さと色を変える。
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesStroke(0, 5.0f); // 太さ
renderer.setSeriesPaintType(0, new SolidColor(Color.rgb(255, 166, 0))); // 色
plot.setRenderer(0, renderer);

DataCenter dataCenter = new DataCenter();
View view = dataCenter.getGraphView();
GraphView graphView = (GraphView) view.findViewById(R.id.graph_view);
graphView.setChart(chart);
graphView.invalidate();

}
}