Попытка захватить оба типа событий, используя код ниже. Результаты, основанные на этом коде, показывают, что OnSwipeTouchListener использует или запутывает события OnChartValueSelectedListener.
Я отслеживаю следующие события в OnSwipeTouchListener: OnSwipeLeft, OnSwipeRight и OnDoubleTap.
Я бы предпочел использовать эти примитивы высокого уровня, если это возможно, вместо того, чтобы пытаться построить его на более низком уровне, используя OnChartGestureListener, как показано здесь:
https://github.com/PhilJay/MPAndroidChart/wiki/Interaction-with-the-Chart
peakChart.let {
// settings
it.legend.isEnabled = false
it.setDrawEntryLabels(true)
//it.setDrawSliceText(true)
it.setEntryLabelTextSize(12.toFloat())
it.setTouchEnabled(true)
// touch
it.setOnChartValueSelectedListener(object : OnChartValueSelectedListener {
override fun onValueSelected(e: Entry, h: Highlight) {
val index = chartPageControl.selection
toast("duration: ${durationIndex[h.x.toInt()]}, type=${thresholdType[index]}")
}
override fun onNothingSelected() {
}
})
// swiping
it.setOnTouchListener(object : OnSwipeTouchListener(applicationContext) {
override fun onSwipeLeft() {
val chartCount = thresholdType.size
if (chartPageControl.selection == chartCount-1 ) {
chartPageControl.selection = 0
} else {
chartPageControl.selection += 1
}
loadPeaks()
super.onSwipeLeft()
}
override fun onSwipeRight() {
val chartCount = thresholdType.size
if (chartPageControl.selection == 0 ) {
chartPageControl.selection = chartCount-1
} else {
chartPageControl.selection -= 1
}
loadPeaks()
super.onSwipeRight()
}
override fun onDoubleTap() {
onSwipeLeft()
}
})
}