From 80a20452570b18b6934e589beb6e95cbdbf1aa20 Mon Sep 17 00:00:00 2001 From: ootr47 Date: Tue, 5 Dec 2023 17:24:47 +0900 Subject: [PATCH] feat: Disable touch event when touch range is outside the graph --- .../java/app/priceguard/materialchart/Chart.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/app/priceguard/materialchart/Chart.kt b/src/main/java/app/priceguard/materialchart/Chart.kt index eddbb26..afdda16 100644 --- a/src/main/java/app/priceguard/materialchart/Chart.kt +++ b/src/main/java/app/priceguard/materialchart/Chart.kt @@ -100,6 +100,7 @@ class Chart @JvmOverloads constructor( private val zeroDp = Dp(1F) private var pointX = 0f + private var pointY = 0f private var isDragging = false // Use Android theme @@ -193,10 +194,20 @@ class Chart @JvmOverloads constructor( } override fun onTouchEvent(event: MotionEvent?): Boolean { - if (dataset?.isInteractive != true) { + if (dataset?.isInteractive != true || event == null) { return false } - when (event?.action) { + pointX = event.x + pointY = event.y + + if (pointX < xAxisMarginStart.toPx(context).value + || pointX > width.toFloat() - xAxisMarginStart.toPx(context).value + || pointY < yAxisMarginEnd.toPx(context).value + || pointY > height.toFloat() - yAxisMarginEnd.toPx(context).value + ) { + return true + } + when (event.action) { MotionEvent.ACTION_DOWN -> { parent.requestDisallowInterceptTouchEvent(true) isDragging = true