基於MPAndroidChart庫製作K線圖(三) —— 手勢高亮聯動
阿新 • • 發佈:2018-11-05
目錄
基於MPAndroidChart庫製作K線圖(一) —— 基礎圖
基於MPAndroidChart庫製作K線圖(二) —— 自定義x、y軸
基於MPAndroidChart庫製作K線圖(三) —— 手勢高亮聯動
一、效果圖
二、高亮聯動
圖表聯動高亮顯示時,通過OnChartValueSelectedListener()可以監聽到圖表的Entry值,通過k線圖高亮來處理柱狀圖的高亮聯動就需要重寫onValueSelected方法
@Override
public void onValueSelected(Entry e, Highlight h) {
if (dstCharts != null) {
for (BarLineChartBase chart : dstCharts) {
float touchY = h.getDrawY();//手指接觸點在srcChart上的Y座標,即手勢監聽器中儲存資料
float y = h.getY();
if (chart instanceof BarChart) {
y = touchY - srcChart.getHeight();
} else if (chart instanceof CombinedChart) {
y = touchY + chart.getHeight();
}
Highlight hl = new Highlight(h.getX(), Float.NaN, h.getDataSetIndex());
hl.setDraw(h.getX(), y);
chart.highlightValues(new Highlight[]{hl});
}
}
if (mListener != null) {
mListener.valueSelected(e);
}
}
然後給CombinedChart和BarChart分別設定高亮監聽
因為k線圖本身有左右滑動的監聽,如果再滑動高亮線的話就會衝突,而在觸發k線圖的監聽OnChartGestureListener之前通過view的onTouch來更改手勢變化
@Override
public boolean onTouch(View v, MotionEvent event) {
mDetector.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
mIsLongPress = false;
mChart.highlightValue(null, true);
if (mListener != null) {
mListener.disableHighlight();
}
mChart.enableScroll();
}
if (mIsLongPress && event.getAction() == MotionEvent.ACTION_MOVE) {
if (mListener != null) {
mListener.enableHighlight();
}
Highlight h = mChart.getHighlightByTouchPoint(event.getX(), event.getY());
if (h != null) {
h.setDraw(event.getX(), event.getY());
mChart.highlightValue(h, true);
mChart.disableScroll();
}
return true;
}
return false;
}
三、原始碼下載
github: https://github.com/xkdaq/KoinChart
coding: https://coding.net/u/xkdaq/p/KoinChart/git