數據點較多時,Hellocharts 線圖顯示擁擠,需實現:
// Viewport 構造:left, top, right, bottom (數據坐標系)
Viewport viewport = new Viewport(left, top, right, bottom);
chart.setCurrentViewport(viewport); // 立即跳轉
// chart.setCurrentViewport(viewport, true); // 帶動畫
// 假設 X 軸為 0,1,2... 對應數據索引
// Y 軸範圍:0 到 最大值
float maxY = chart.getMaximumViewport().top; // 獲取數據最大 Y 值
// 顯示索引 0 到 9(共 10 個點)
Viewport initialViewport = new Viewport(
0, // left: X軸起始
maxY, // top: Y軸最大值(注意:Y軸向上增長)
9, // right: X軸終止(索引9)
0 // bottom: Y軸最小值
);
chart.setCurrentViewport(initialViewport);
public class ChartViewportHelper {
public static void showRange(LineChartView chart, int startX, int endX) {
Viewport max = chart.getMaximumViewport();
Viewport v = new Viewport(
startX,
max.top,
endX,
max.bottom
);
chart.setCurrentViewport(v);
}
public static void resetToFull(LineChartView chart) {
chart.setCurrentViewport(chart.getMaximumViewport());
}
public static void zoomIn(LineChartView chart, float factor) {
Viewport cur = chart.getCurrentViewport();
float width = cur.right - cur.left;
float center = (cur.left + cur.right) / 2;
float newWidth = width / factor;
Viewport v = new Viewport(
center - newWidth/2, cur.top,
center + newWidth/2, cur.bottom
);
chart.setCurrentViewport(v);
}
}
| Viewport | 含義 | 用途 |
|---|---|---|
| MaximumViewport | 數據實際邊界(所有點包含) | 只讀,重置用 |
| CurrentViewport | 當前可視區域 | 讀寫,縮放平移核心 |
| ComputedViewport | 含邊距、標籤空間的計算視口 | 內部繪圖用 |