MPAndroidChart如何监听PieChart旋转?

MPAndroidChart how to listen to PieChart rotation?

我正在使用 MPAndroidChart (A wonderfull chart library BTW), to set-up a Pie Chart like in the example given。生成的饼图可以手动转动,以他的中心为中心进行旋转。我目前正在尝试收听轮换事件,并且想知道是否有使用该库的方法。 我尝试为此使用以下侦听器但未成功:

onDrawListener 
setOnClickListener 
setOnLongClickListener
addOnLayoutChangeListener

谢谢,

目前这是不可能的。您将不得不编写自己的侦听器并修改负责处理触摸事件的库的 类。

可以读取当前的旋转角度。我 运行 这个命令在协程内的 while(true) 循环中延迟了 10 毫秒。

GlobalScope.launch {
        while (true) {
            try {
                val rotation = pieChart.rotationAngle
                delay(10)
            } catch (ex: Exception) {
                // do nothing
            }
        }
    }

这是我应用程序中的一个复活节彩蛋,如果用户在 3 秒内旋转饼图 10 次,我会显示一些有趣的东西。

为了检查用户是否进行了完整的旋转,我沿着旋转设置了检查点并查看用户是否通过了它们。 3 秒后所有检查点将被重置。

if (rotating && rotation < 100 && checkpoints == 0) {
        fullRotations += 1
        checkpoints = 1
    } else if (rotating && rotation > 100 && rotation < 200 && checkpoints == 1) {
        checkpoints = 2
    } else if (rotating && rotation > 200 && rotation < 360 && checkpoints == 2) {
        checkpoints = 3
    } else if (rotating && rotation < 100 && checkpoints == 3) {
        fullRotations += 1
        checkpoints = 1
    }

可以使用此代码创建事件,例如 -> 如果 'n' 发生完整旋转,则执行某些操作。只要你跟踪旋转角度的变化,你就可以做你想做的事。如果你有你的事件,你可以创建一个 ListenerInterface 并在你的 class 中实现它。然后你有你的回调。

while(true) 可能不是最优雅的方式,但在我的例子中它工作得很好。如果你想要我的代码,请告诉我。我不想让我的回答过多。

这里有一些更有效的方法。您可以使用图表的 OnTouch 侦听器来侦听 ACTION_MOVE 事件,这些事件对应于用户拖动图表:

chart.setOnTouchListener { v, event ->
            when (event.action) {
                MotionEvent.ACTION_MOVE -> {
                    // Here's the rotation
                    val rot = chart.rotationAngle
                }
            }
            false
        }

这样一来,每当用户移动图表时,它就会旋转。