我需要一个饼图,数据集中有三个条目,这样当我触摸图表时,它会旋转到正确的数据(这意味着它从数据[0]开始 - >点击 - >旋转到数据[1 ] - >点击 - >旋转到数据[2] - >点击 - >旋转到数据[0])。
我实施的解决方案是这样的:
START_OFFSET = 95;
_index0= absoluteAngles[0] - (drawAngles[0] / 2) - START_OFFSET ;
_index1= absoluteAngles[1] - (drawAngles[1] / 2) - START_OFFSET ;
_pendingPieOffset = absoluteAngles[2] - (drawAngles[2] / 2) - START_OFFSET;
以下是问题的起点。这可以给出正确的角度,因为absoluteAngle
表示切片的末端,drawAngles
表示切片的宽度。因此,即使我的数学是正确的,我也无法将每个切片的中心与底部对齐。
_overlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
case AVAILABLE_BALANCE:
_pieChart.spin(SPIN_DURATION, _index2, _index0, Easing.EasingOption.EaseInCubic);
break;
case USED_BALANCE:
_pieChart.spin(SPIN_DURATION, _index0, _index1, Easing.EasingOption.EaseInCubic);
break;
case PENDING_BALANCE:
_pieChart.spin(SPIN_DURATION, _index1, _index0, Easing.EasingOption.EaseInCubic);
break;
....
}
答案 0 :(得分:3)
我在我的项目中做了一些类似的功能,也许它会对你有所帮助:
@Override
public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
//get current angle
float start = chart.getRotationAngle();
//get index of current slice
int i = e.getXIndex();
//calculate center of slice
float offset = mDrawAngles[i] / 2;
// calculate the next angle
float end = 270f-(mAbsoluteAngles[i]-offset);
//rotate to slice center
chart.spin(SPIN_DURATION,start,end,Easing.EasingOption.EaseInOutQuad);
}
只需在活动或片段中实施 OnChartValueSelectedListener 界面 - MPAndroidChart Wiki。
P.S。在我的例子中,选定的切片位于顶部的中心位置(底部更改为270到90)