Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPAndroidChart图表角度_Android_Mpandroidchart - Fatal编程技术网

MPAndroidChart图表角度

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

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

我在我的项目中做了一些类似的功能,也许它会帮助您:

@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)