我們接著上篇,來說下k線的分頁加載更多和高亮線的相關
圖表的相關滑動都在OnChartGestureListener這個接口里惭蹂,
我們定義一個類去實現它的方法
這個接口總共有8個方法
onChartGestureStart ——>字面意思就是開始
onChartGestureEnd ——>結束
onChartLongPressed ——>長按事件
onChartDoubleTapped——>雙擊事件
onChartSingleTapped——>單擊事件
onChartFling——>手指滑動事件
onChartScale——>縮放事件
onChartTranslate——移動事件
我們實現上下兩個圖表聯(lián)動也是在這個類里來實現的
private Chart srcChart;
private Chart[] dstCharts;
//這個方法就是實現上下圖表聯(lián)動的--->方法來自網絡
void syncCharts() {
Matrix srcMatrix;
float[] srcVals = new float[9];
Matrix dstMatrix;
float[] dstVals = new float[9];
// get src chart translation matrix:
srcMatrix = srcChart.getViewPortHandler().getMatrixTouch();
srcMatrix.getValues(srcVals);
// apply X axis scaling and position to dst charts:
for (Chart dstChart : dstCharts) {
if (dstChart.getVisibility() == View.VISIBLE) {
dstMatrix = dstChart.getViewPortHandler().getMatrixTouch();
dstMatrix.getValues(dstVals);
dstVals[Matrix.MSCALE_X] = srcVals[Matrix.MSCALE_X];
dstVals[Matrix.MSKEW_X] = srcVals[Matrix.MSKEW_X];
dstVals[Matrix.MTRANS_X] = srcVals[Matrix.MTRANS_X];
dstVals[Matrix.MSKEW_Y] = srcVals[Matrix.MSKEW_Y];
dstVals[Matrix.MSCALE_Y] = srcVals[Matrix.MSCALE_Y];
dstVals[Matrix.MTRANS_Y] = srcVals[Matrix.MTRANS_Y];
dstVals[Matrix.MPERSP_0] = srcVals[Matrix.MPERSP_0];
dstVals[Matrix.MPERSP_1] = srcVals[Matrix.MPERSP_1];
dstVals[Matrix.MPERSP_2] = srcVals[Matrix.MPERSP_2];
dstMatrix.setValues(dstVals);
dstChart.getViewPortHandler().refresh(dstMatrix, dstChart, true);
}
}
}
我們滑動要分頁加載歷史k線數據該怎么解決呢
1.定義一個接口LoadMoreListener 加載更多接口
public interface LoadMoreListener {
void onLoadMore();
}
2.定義一個標記是否加載更多
private boolean canloadMore = false;
3.我們在onChartGestureStart設置canloadMore為false
4.在onChartGestureEnd中我們判斷是否該加載更多
if (canloadMore && srcChart instanceof CombinedChart && loadmore != null) {
//這個是我自身需求獲取最小可見
float lowestVisibleX = ((CombinedChart) srcChart).getLowestVisibleX();
float highestVisibleX = ((CombinedChart) srcChart).getHighestVisibleX();
if (xVisibleminAndMax != null) {
xVisibleminAndMax.xVisiblemin((int) lowestVisibleX);
xVisibleminAndMax.xVisiblemax((int) highestVisibleX);
}
//主要這個方法
loadmore.onLoadMore();
}
5.我們在滑動中事件onChartTranslate設置
if (!canloadMore && srcChart instanceof CombinedChart && loadmore != null) {
float lowestVisibleX = ((CombinedChart) srcChart).getLowestVisibleX();
float highestVisibleX = ((CombinedChart) srcChart).getHighestVisibleX();
if (xVisibleminAndMax != null) {
xVisibleminAndMax.xVisiblemin((int) lowestVisibleX);
xVisibleminAndMax.xVisiblemax((int) highestVisibleX);
}
//向右滑動
if (dX > 0) {
//滑動的可見最小值小于50就去加載數據
if (lowestVisibleX < 50) {
canloadMore = true;
}
}
}
6.在Activity中實現這個接口加載更多就行。
我們在滑動高亮線改變標記
1.高亮線的事件在OnChartValueSelectedListener
@Override
public void onValueSelected(Entry e, Highlight h) {
//這里就是改變上面MA5割粮,MA10剿干,MA20的值
selectVaules(e, h);
stock_CombinedBarChar.highlightValues(new Highlight[]{h});
//當高亮線顯示的時候取消圖表拖動功能
mCombinedChart.setDragEnabled(false);
stock_CombinedBarChar.setDragEnabled(false);
mCombinedChart.setHighlightPerDragEnabled(true);
stock_CombinedBarChar.setHighlightPerDragEnabled(true);
}
@Override
public void onNothingSelected() {
fragmentToActivity.onNothingSelected();
stock_CombinedBarChar.highlightValues(null);
//當高亮線消失的時候開啟圖表拖動功能
mCombinedChart.setDragEnabled(true);
stock_CombinedBarChar.setDragEnabled(true);
mCombinedChart.setHighlightPerDragEnabled(false);
stock_CombinedBarChar.setHighlightPerDragEnabled(false);
}
我們第一次打開k線的時候是將數據移動到最右側的
1.定一個標記,表示第一次
//將數據移動到最右側
mCombinedChart.moveViewToX(kLinePointses.size() - 1);
stock_CombinedBarChar.moveViewToX(kLinePointses.size() - 1);
2.定義最多顯示的條目
//最多顯示60組數據
mCombinedChart.setVisibleXRangeMaximum(60);
// 最少顯示30組數據
mCombinedChart.setVisibleXRangeMinimum(30);
stock_CombinedBarChar.setVisibleXRangeMaximum(60);
stock_CombinedBarChar.setVisibleXRangeMinimum(30);
//自動伸縮
mCombinedChart.setAutoScaleMinMaxEnabled(true);
stock_CombinedBarChar.setAutoScaleMinMaxEnabled(true);
3.就剩下將數據添加到圖表啦穆刻。
有問題請?zhí)岢鲋x謝