Android-当包含在ScrollView中时,MPAndroidChart中的拖动是无响应的
我有一个包含在滚动视图中的折线图。当图表足够长,用户需要滚动才能看到整个图表时,拖动功能将失去响应。只有当我在图表边界上短时间按住手指然后拖动时,才会出现拖动手势 我尝试过使用这种方法,可以防止图表的父对象拦截触摸事件(但这并不能解决任何问题)。我还尝试直接将ScrollView注册的MotionEvents传递到图表/将拖动手势转换为translateY调用,但这并没有达到我所认为的效果 注意:缩放仍然可以完美地工作 此外,当图形适合原始窗口或放置在非滚动视图的任何视图中时,这不是问题。我曾考虑过去掉ScrollView,但它是我项目中非常必要的功能 任何关于为什么会发生这种情况的想法都将不胜感激Android-当包含在ScrollView中时,MPAndroidChart中的拖动是无响应的,android,scrollview,mpandroidchart,Android,Scrollview,Mpandroidchart,我有一个包含在滚动视图中的折线图。当图表足够长,用户需要滚动才能看到整个图表时,拖动功能将失去响应。只有当我在图表边界上短时间按住手指然后拖动时,才会出现拖动手势 我尝试过使用这种方法,可以防止图表的父对象拦截触摸事件(但这并不能解决任何问题)。我还尝试直接将ScrollView注册的MotionEvents传递到图表/将拖动手势转换为translateY调用,但这并没有达到我所认为的效果 注意:缩放仍然可以完美地工作 此外,当图形适合原始窗口或放置在非滚动视图的任何视图中时,这不是问题。我曾考
编辑:折线图有一个固定的高度这个问题有点老了,但我最近遇到了同样的问题,为了解决这个问题,我做了以下几点
***您可以在setOntouchListener上执行所有操作,但在我的例子中,我需要重用RequestDisallowerWinterCeptTouchEvent。与Ruan_Lopes提到的方法类似,您不需要透明的覆盖视图。您还可以使用图表手势侦听器以相同的方式截获触摸
lineChart.onChartGestureListener = object : OnChartGestureListener {
override fun onChartGestureEnd(
me: MotionEvent?,
lastPerformedGesture: ChartTouchListener.ChartGesture?
) = Unit
override fun onChartFling(
me1: MotionEvent?,
me2: MotionEvent?,
velocityX: Float,
velocityY: Float
) = Unit
override fun onChartSingleTapped(me: MotionEvent?) = Unit
override fun onChartGestureStart(
e: MotionEvent?,
lastPerformedGesture: ChartTouchListener.ChartGesture?
) = recyclerView.requestDisallowInterceptTouchEvent(true)
override fun onChartScale(me: MotionEvent?, scaleX: Float, scaleY: Float) = Unit
override fun onChartLongPressed(me: MotionEvent?) = Unit
override fun onChartDoubleTapped(me: MotionEvent?) = Unit
override fun onChartTranslate(me: MotionEvent?, dX: Float, dY: Float) = Unit
}
你找到解决办法了吗?这是个好答案!它起作用了。在我的案例中,我想向下存储(x,y)个动作,然后我想检测的第一个动作是dx>dy是否允许拖动图表显示值,并继续拖动图表,而不再计算dx和dy。但是,如果第一次移动dx
protected boolean onTouchActionHandler(View v, MotionEvent event){
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow RecyclerView to intercept touch events.
scrollView.requestDisallowInterceptTouchEvent(true);
Log.e(TAG, "onTouchActionHandler: ACTION_DOWN" );
// Disable touch on transparent view
return false;
default:
return true;
}
}
lineChart.onChartGestureListener = object : OnChartGestureListener {
override fun onChartGestureEnd(
me: MotionEvent?,
lastPerformedGesture: ChartTouchListener.ChartGesture?
) = Unit
override fun onChartFling(
me1: MotionEvent?,
me2: MotionEvent?,
velocityX: Float,
velocityY: Float
) = Unit
override fun onChartSingleTapped(me: MotionEvent?) = Unit
override fun onChartGestureStart(
e: MotionEvent?,
lastPerformedGesture: ChartTouchListener.ChartGesture?
) = recyclerView.requestDisallowInterceptTouchEvent(true)
override fun onChartScale(me: MotionEvent?, scaleX: Float, scaleY: Float) = Unit
override fun onChartLongPressed(me: MotionEvent?) = Unit
override fun onChartDoubleTapped(me: MotionEvent?) = Unit
override fun onChartTranslate(me: MotionEvent?, dX: Float, dY: Float) = Unit
}