SimpleDateFormat
は改行コード \n
をそのまま文字列として扱うため、フォーマット中に含めても改行されません。そのため、SimpleDateFormat
を使って日付と時間をフォーマットした後に、改行を追加する必要があります。
以下は改行を追加する方法の例です。
import com.github.mikephil.charting.formatter.ValueFormatter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MyValueFormatter extends ValueFormatter {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd", Locale.getDefault());
private final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());
@Override
public String getFormattedValue(float value) {
long unixSeconds = (long) value;
Date date = new Date(unixSeconds * 1000L); // UNIX時刻は秒単位なのでミリ秒に変換
String datePart = dateFormat.format(date);
String timePart = timeFormat.format(date);
return datePart + "\n" + timePart;
}
}
このようにして、日付部分と時間部分を別々にフォーマットし、それらを改行で結合します。
このフォーマッターをグラフに適用する手順は以下の通りです。
LineChart lineChart = findViewById(R.id.lineChart);
LineData data = lineChart.getData();
if (data != null) {
LineDataSet dataSet = (LineDataSet) data.getDataSetByIndex(0);
dataSet.setValueFormatter(new MyValueFormatter());
lineChart.invalidate(); // グラフを再描画
}
これで、UNIX時刻を「月-日\n時間:分」という形式に変換し、日付と時間を改行して表示することができます。
MPAndroidChartのValueFormatter
を使って、KotlinでUNIX時刻を日付と時間に改行して表示する方法を以下に示します。
まず、カスタムValueFormatter
を作成します。
import com.github.mikephil.charting.formatter.ValueFormatter
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
class MyValueFormatter : ValueFormatter() {
private val dateFormat = SimpleDateFormat("MM-dd", Locale.getDefault())
private val timeFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
override fun getFormattedValue(value: Float): String {
val unixSeconds = value.toLong()
val date = Date(unixSeconds * 1000L) // UNIX時刻は秒単位なのでミリ秒に変換
val datePart = dateFormat.format(date)
val timePart = timeFormat.format(date)
return "$datePart\n$timePart" // 日付と時間を改行で結合
}
}
次に、このフォーマッターをグラフのX軸に適用します。
val lineChart: LineChart = findViewById(R.id.lineChart)
lineChart.xAxis.valueFormatter = MyValueFormatter()
lineChart.invalidate() // グラフを再描画
改行コードが正しく表示されない場合、Unicodeの改行文字(\u000A
)を使用してみます:
class MyValueFormatter : ValueFormatter() {
private val dateFormat = SimpleDateFormat("MM-dd", Locale.getDefault())
private val timeFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
override fun getFormattedValue(value: Float): String {
val unixSeconds = value.toLong()
val date = Date(unixSeconds * 1000L) // UNIX時刻は秒単位なのでミリ秒に変換
val datePart = dateFormat.format(date)
val timePart = timeFormat.format(date)
return "$datePart\u000A$timePart" // Unicodeの改行文字を使用
}
}
再度、これをX軸に適用します。
val lineChart: LineChart = findViewById(R.id.lineChart)
lineChart.xAxis.valueFormatter = MyValueFormatter()
lineChart.invalidate() // グラフを再描画
これでも改行が反映されない場合、MPAndroidChart自体が改行に対応していない可能性があります。その場合は、カスタムの描画ロジックを実装するか、改行の代わりにスペースを使うなどの代替方法を検討する必要があります。