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
}
这样一来,每当用户移动图表时,它就会旋转。
我正在使用 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
}
这样一来,每当用户移动图表时,它就会旋转。