MPAndroidChart图表角度
我需要一个在数据集中有三个条目的饼图,这样当我触摸图表时,它会旋转到正确的数据(这意味着它从数据[0]->单击->旋转到数据[1]->单击->旋转到数据[2]->单击->旋转到数据[0]) 我实施的解决方案是这样的:MPAndroidChart图表角度,android,mpandroidchart,Android,Mpandroidchart,我需要一个在数据集中有三个条目的饼图,这样当我触摸图表时,它会旋转到正确的数据(这意味着它从数据[0]->单击->旋转到数据[1]->单击->旋转到数据[2]->单击->旋转到数据[0]) 我实施的解决方案是这样的: START_OFFSET = 95; _index0= absoluteAngles[0] - (drawAngles[0] / 2) - START_OFFSET ; _index1= absoluteAngles[1] - (drawAngles[1] / 2) - START
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;
....
}
我在我的项目中做了一些类似的功能,也许它会帮助您:
@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);
}
只需在activity或fragment-中实现OnChartValueSelectedListener接口
另外,在我的例子中,所选的切片位于顶部的中心。(底部更改为270到90)我在我的项目中做了一些类似的功能,也许它会帮助您:
@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);
}
只需在activity或fragment-中实现OnChartValueSelectedListener接口
另外,在我的例子中,选定的切片位于顶部的中心位置。(底部从270变为90)