グラフの表示時刻の範囲に応じて分割数を動的に変更
@@ -261,11 +261,37 @@ | ||
261 | 261 | UnderstandabilityChartFragment ucf = (UnderstandabilityChartFragment) f; |
262 | 262 | |
263 | 263 | long beginToEnd = dateEnd.getTimeInMillis() - dateBegin.getTimeInMillis(); |
264 | - ucf.setDivision((beginToEnd + 9) / 10, 10); | |
265 | - ucf.setDateFormat(new SimpleDateFormat("MM-dd")); | |
264 | + long diffInSecond = beginToEnd / 1000; | |
265 | + long diffInMinute = diffInSecond / 60; | |
266 | + long diffInHour = diffInMinute / 60; | |
267 | + long diffInDay = diffInHour / 24; | |
268 | + long diffInMonth = diffInDay / 30; | |
266 | 269 | |
267 | - Log.d("obsv", "setDivision: " + beginToEnd + "msec"); | |
268 | 270 | |
271 | + int numDivision = 1; | |
272 | + String dateFormatString = "yyyy-MM-dd HH-mm"; | |
273 | + if (diffInDay <= 1) { // 1日以下 | |
274 | + numDivision = (int) (beginToEnd / (1000L * 60 * 60)); // 1時間ごと | |
275 | + dateFormatString = "HH"; | |
276 | + } else if (diffInDay <= 30) { | |
277 | + numDivision = (int) (beginToEnd / (1000L * 60 * 60 * 24)); | |
278 | + dateFormatString = "dd"; | |
279 | + } else if (diffInDay <= 60) { | |
280 | + numDivision = (int) (beginToEnd / (1000L * 60 * 60 * 24 * 7)); | |
281 | + dateFormatString = "dd"; | |
282 | + } else if (diffInMonth <= 12) { | |
283 | + numDivision = (int) (beginToEnd / (1000L * 60 * 60 * 24 * 30)); | |
284 | + dateFormatString = "MM"; | |
285 | + } | |
286 | + if (numDivision > 0) { | |
287 | + Log.d("obsv", "setDivision: " + beginToEnd + "msec / " + numDivision); | |
288 | + ucf.setDivision(beginToEnd / numDivision, numDivision); | |
289 | + } else { | |
290 | + Log.d("obsv", "setDivision: default: " + beginToEnd + "msec / " + 1); | |
291 | + ucf.setDivision(beginToEnd, 1); | |
292 | + } | |
293 | + ucf.setDateFormat(new SimpleDateFormat(dateFormatString)); | |
294 | + | |
269 | 295 | ucf.update(comments, dateEnd.getTimeInMillis()); |
270 | 296 | } else if (f instanceof CommentListFragment) { |
271 | 297 | ((CommentListFragment) f).update(comments); |
@@ -108,7 +108,7 @@ | ||
108 | 108 | renderer.setXTitle("時刻"); |
109 | 109 | renderer.setYTitle("理解度"); |
110 | 110 | renderer.setXAxisMin(0.5); |
111 | - renderer.setXAxisMax(10.5); | |
111 | + renderer.setXAxisMax(mNumDivision + 0.5); | |
112 | 112 | renderer.setYAxisMin(-2); |
113 | 113 | renderer.setYAxisMax(2); |
114 | 114 | renderer.setAxesColor(Color.GRAY); |
@@ -154,6 +154,7 @@ | ||
154 | 154 | mChartRenderer.addXTextLabel(i + 1, |
155 | 155 | mDateFormat.format(new Date(dateBegin + mDateDivision * i))); |
156 | 156 | } |
157 | + mChartRenderer.setXAxisMax(mNumDivision + 0.5); | |
157 | 158 | |
158 | 159 | // Y軸の表示範囲を設定 |
159 | 160 | double ymax = 0; |