2015-11-02 48 views
0

我需要在數據集中有三個條目的餅圖,這樣當我觸摸圖表時,它會旋轉到正確的數據(這意味着它從數據[0]開始 - >單擊 - >旋轉到數據[ 1] - >單擊 - >旋轉到數據[2] - >單擊 - >旋轉到數據[0])。MPAndroidChart PieChart角度

我實現的解決方案是這樣的:

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; 
    .... 
    } 

回答

2

我確實在我的項目的一些類似的功能,也許它會幫助你:

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