1. 程式人生 > >一步一步教你寫股票走勢圖——分時圖四(高亮聯動)

一步一步教你寫股票走勢圖——分時圖四(高亮聯動)

前一節我們學習了有關柱狀圖的高亮自定義,那麼這一節我們來搞一搞兩張圖表的聯動效果,先看一下我們要實現的效果。
這裡寫圖片描述

我們要實現兩張圖表之間建立了連線,我們滾動高亮第一張圖,第二張圖表的高亮也會跟著動,滾動第二張圖表第一張要跟著動。

分析原始碼

在Chart中,我們找到了如下一段程式碼:

/**
     * Highlights the values at the given indices in the given DataSets. Provide
     * null or an empty array to undo all highlighting. This should be used to
     * programmatically highlight values. This DOES NOT generate a callback to
     * the OnChartValueSelectedListener.
     *
     * @param
highs */
public void highlightValues(Highlight[] highs) { // set the indices to highlight mIndicesToHighlight = highs; if (highs == null || highs.length <= 0 || highs[0] == null) { mChartTouchListener.setLastHighlighted(null); } else { mChartTouchListener.setLastHighlighted(highs[0
]); } // redraw the chart invalidate(); }

這個函式大概功能就是設定圖表高亮值得(如果哪位大神覺得不對了,請指正,這是小弟的見解啊,經過測試,也能實現這個功能),所以我們也就有了思路:

表A高亮滾動時傳遞highlight值給表B
表B高亮滾動式傳遞highlight值給表A

那麼我們怎麼監聽兩表的高亮滾動事件呢?

監聽事件:

 public void setOnChartValueSelectedListener(OnChartValueSelectedListener l) {
        this
.mSelectionListener = l; }

OnChartValueSelectedListener 都有啥引數傳遞呢?

void onValueSelected(Entry e, int dataSetIndex, Highlight h);

看到Highlight是不是特別激動,反正博主已經激動的不要不要了,好像日個牆玩玩!

寫程式碼

我們這就開始監聽並傳遞資料過去:

 lineChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
                barChart.highlightValues(new Highlight[]{h});
            }

            @Override
            public void onNothingSelected() {

            }
        });
        barChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
                lineChart.highlightValues(new Highlight[]{h});
            }

            @Override
            public void onNothingSelected() {

            }
        });

抱著試試看的態度測試了一下,請看效果圖

這裡寫圖片描述