当前位置: 首页 > 知识库问答 >
问题:

如何在MPAndroidChart中绘制可拖动的限制线

韩嘉祯
2023-03-14

我已经使用MP Android chart创建了一个折线图,并希望创建一条可拖动的线来设置限制。因此,如果该值超过行值,则用户会收到警报。我的用例类似于Android系统数据使用限制。

我遇到了LimitLines-https://github.com/PhilJay/MPAndroidChart/wiki/The-Axis,还使用触摸事件回调拖动https://github.com/PhilJay/MPAndroidChart/wiki/Interaction-with-the-Chart

我的问题是,是否可以在对translate(onChartTranslate)事件的响应上动态添加限制行,以便模拟限制设置?这是一种比试图重载MarkerView更好的方法吗?

共有1个答案

胡越
2023-03-14

我设法创建了一个可拖动的(水平)LimitLine,方法是使用OnChartGestureListener侦听拖动事件的开始和结束:

chart.onChartGestureListener = object: OnChartGestureListener {
    override fun onChartGestureEnd(me: MotionEvent?, lastPerformedGesture: ChartTouchListener.ChartGesture?) {
        if (lastPerformedGesture == ChartTouchListener.ChartGesture.DRAG && limitLineDragEnabled) {
            me?.let {
                displayLimitLine(me)
            }
            limitLineDragEnabled = false
        }
    }

    override fun onChartLongPressed(me: MotionEvent?) {
        if (binding.chart.isFullyZoomedOut) {
            limitLineDragEnabled = true

            me?.let {
                displayLimitLine(me)
            }
        }
    }
}

和一个ChartTouchListener在拖动开始和结束之间捕获MotionEvents(可悲的是,OnChartGestureListener无法在那里帮助我):

chart.onTouchListener = object: BarLineChartTouchListener(chart,  chart.viewPortHandler.matrixTouch, 3f) {

    @SuppressLint("ClickableViewAccessibility")
    override fun onTouch(v: View?, me: MotionEvent?): Boolean {
        if (limitLineDragEnabled) {
            me?.let {
                displayLimitLine(me)
            }
        }

        return super.onTouch(v, me)
    }

}
 类似资料:
  • 如果我把筹码拖离初始位置,它应该画一条线。当我移动筹码时,它应该总是画一条线。 这就是我所尝试的: 我将该代码放在芯片的ontouch listener中。您可以在此处下载该项目:https://www.dropbox.com/s/ggfbsbkaokj9vxi/CoachingBoard.rar?dl=0

  • 图形界面允许您使用不同的类创建图形。 在下面的代码中,我使用3个不同的类创建形状: 产生屏幕图像: 不幸的是,接口不提供任何用于转换的功能。 例如,要将形状移动到新位置,我使用以下方法: 我不喜欢逻辑的实例。 是否有一种更通用的方法可以在不使用instanceof逻辑的面板周围拖动任何形状? 完整示例:

  • 假设我有多行,其中一行我想隐藏。如何做到这一点?将删除完整的行,但我只想隐藏该行。在这个图表API中有可能吗?

  • 问题内容: 这是我的问题…: 在我的活动中,我有一个和一个。我希望Button仅在显示某个可绘制对象时才执行操作。是的,这意味着该代码正在各种可绘制对象之间进行动画处理,从而使其不会中断我想要完成的工作。 没用 并且我将其范围缩小到“ if(vari(drawabledrawable == acertaindrawable)”行的错误。尽管Eclipse并没有公然报告两个可绘制对象是否相同的And

  • 我想让我的应用程序中的编辑文本行成为自定义颜色,所以我使用了一个可绘制线条的xml,并将其设置为我的编辑文本背景,即如何在EditText中更改线条颜色。 问题是我画的线现在表现为删除线,而不是出现在编辑文本的底部。有没有办法把它们移下来? 尝试设置Android:重力编辑文本和绘图。 http://i.stack.imgur.com/ncl9H.png

  • 是否可以用自定义布局替换?所以它看起来像这样: 我认为这方面的解决方案很少: 也许库中有这样的自定义方法,有吗 也许有人遇到了这个问题。请分享你的经验。 编辑:最新部分解决方案 经过长时间的搜索解决方案,我想到了通过限制线的坐标以编程方式添加自定义视图。 屏幕总布置如下: 坐标的计算非常简单<从图表坐标和Y中可以知道代码>X: Y=((最大-最新值)*高度)/((最大-最小)Y) 所以在这一点上,