MPAndroidChart PieChart Angles

时间:2015-11-02 14:41:47

标签: android mpandroidchart

我需要一个饼图,数据集中有三个条目,这样当我触摸图表时,它会旋转到正确的数据(这意味着它从数据[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;
    ....
    }

1 个答案:

答案 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)