首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Hellocharts-android圖表縮放與視口控制:setCurrentViewport實現局部顯示

     編輯:程式設計綜合問答

問題現象

數據點較多時,Hellocharts 線圖顯示擁擠,需實現:

  • 初始顯示部分數據(如前 10 個點)
  • 支持手勢縮放、平移
  • 程序控制可視範圍

核心 API:Viewport

// Viewport 構造:left, top, right, bottom (數據坐標系)
Viewport viewport = new Viewport(left, top, right, bottom);
chart.setCurrentViewport(viewport); // 立即跳轉
// chart.setCurrentViewport(viewport, true); // 帶動畫

實現「顯示前 N 個點」

// 假設 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);
    }
}

關鍵屬性區別

注意事項

  • Y 軸座標系:**top > bottom**(數學坐標系,向上增長)
  • 設置 Viewport 後需 `chart.invalidate()` 觸發重繪(部分版本自動)
  • 極值計算:`max.top` 可能為負(數據全負),需根據業務調整
  • 動畫參數:`setCurrentViewport(v, true)` 啟用平滑過渡
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
Viewport含義用途
MaximumViewport數據實際邊界(所有點包含)只讀,重置用
CurrentViewport當前可視區域讀寫,縮放平移核心
ComputedViewport含邊距、標籤空間的計算視口內部繪圖用