2016-11-29 2 views
1

안녕하세요, 저는 MPAndroid 라이브러리 차트에서 BarChartMultiDataset을 통합하는 과정에 있습니다. 나는 매 2 줄의 상단에서 원하는 스크린 샷 여기BarChartActivityMultiDataset을 사용자 정의하는 방법

state of my activity 같은 2009 년과 2010 와 같은 수준의 NUMERO 내 활동 코드 :

public class BarChartActivityMultiDataset extends DemoBase implements OnSeekBarChangeListener, 
    OnChartValueSelectedListener { 
private BarChart mChart; 
private SeekBar mSeekBarX, mSeekBarY; 
private TextView tvX, tvY; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_barchart); 

    tvX = (TextView) findViewById(R.id.tvXMax); 
    tvX.setTextSize(10); 
    tvY = (TextView) findViewById(R.id.tvYMax); 

    mSeekBarX = (SeekBar) findViewById(R.id.seekBar1); 
    mSeekBarX.setOnSeekBarChangeListener(this); 

    mSeekBarY = (SeekBar) findViewById(R.id.seekBar2); 
    mSeekBarY.setOnSeekBarChangeListener(this); 

    mChart = (BarChart) findViewById(R.id.chart1); 
    mChart.setOnChartValueSelectedListener(this); 
    mChart.getDescription().setEnabled(false); 


    // scaling can now only be done on x- and y-axis separately 
    mChart.setPinchZoom(false); 

    mChart.setDrawBarShadow(false); 

    mChart.setDrawGridBackground(false); 

    // create a custom MarkerView (extend MarkerView) and specify the layout 
    // to use for it 
    MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view); 
    mv.setChartView(mChart); // For bounds control 
    mChart.setMarker(mv); // Set the marker to the chart 

    mSeekBarX.setProgress(10); 
    mSeekBarY.setProgress(100); 

    Legend l = mChart.getLegend(); 
    l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); 
    l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); 
    l.setOrientation(Legend.LegendOrientation.VERTICAL); 
    l.setDrawInside(true); 
    l.setTypeface(mTfLight); 
    l.setYOffset(0f); 
    l.setXOffset(10f); 
    l.setYEntrySpace(0f); 
    l.setTextSize(8f); 
    XAxis xAxis = mChart.getXAxis(); 
    xAxis.setTypeface(mTfLight); 
    xAxis.setGranularity(1f); 
    xAxis.setCenterAxisLabels(true); 
    xAxis.setValueFormatter(new IAxisValueFormatter() { 
     @Override 
     public String getFormattedValue(float value, AxisBase axis) { 
      return String.valueOf((int) value); 
     } 
    }); 

    YAxis leftAxis = mChart.getAxisLeft(); 
    leftAxis.setTypeface(mTfLight); 
    leftAxis.setValueFormatter(new LargeValueFormatter()); 
    leftAxis.setDrawGridLines(false); 
    leftAxis.setSpaceTop(35f); 
    leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true) 

    mChart.getAxisRight().setEnabled(false); 
} 



@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 

    float groupSpace = 0.08f; 
    float barSpace = 0.03f; // x4 DataSet 
    float barWidth = 0.2f; // x4 DataSet 
    // (0.2 + 0.03) * 4 + 0.08 = 1.00 -> interval per "group" 

    int groupCount = 3 + 1; 
    int startYear = 2009; 
    int endYear = startYear + groupCount; 

    tvX.setText(startYear + "-" + endYear); 
    tvY.setText("" + (mSeekBarY.getProgress())); 

    ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>(); 
    ArrayList<BarEntry> yVals2 = new ArrayList<BarEntry>(); 
    // ArrayList<BarEntry> yVals3 = new ArrayList<BarEntry>(); 
    // ArrayList<BarEntry> yVals4 = new ArrayList<BarEntry>(); 

    float randomMultiplier = mSeekBarY.getProgress() * 100000f; 

    for (int i = startYear; i < endYear; i++) { 
     yVals1.add(new BarEntry(i, (float) (Math.random() * randomMultiplier))); 
     yVals2.add(new BarEntry(i, (float) (Math.random() * randomMultiplier))); 
    //  yVals3.add(new BarEntry(i, (float) (Math.random() * randomMultiplier))); 
    // yVals4.add(new BarEntry(i, (float) (Math.random() * randomMultiplier))); 
    } 

    BarDataSet set1, set2, set3, set4; 

    if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { 

     set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0); 
     set2 = (BarDataSet) mChart.getData().getDataSetByIndex(1); 
     set3 = (BarDataSet) mChart.getData().getDataSetByIndex(2); 
     set4 = (BarDataSet) mChart.getData().getDataSetByIndex(3); 
     set1.setValues(yVals1); 
     set2.setValues(yVals2); 
     //set3.setValues(yVals3); 
     //set4.setValues(yVals4); 
     mChart.getData().notifyDataChanged(); 
     mChart.notifyDataSetChanged(); 

    } else { 
     // create 4 DataSets 
     set1 = new BarDataSet(yVals1, "Company A"); 
     set1.setColor(Color.rgb(104, 241, 175)); 
     set2 = new BarDataSet(yVals2, "Company B"); 
     set2.setColor(Color.rgb(164, 228, 251)); 
     // set3 = new BarDataSet(yVals3, "Company C"); 
     // set3.setColor(Color.rgb(242, 247, 158)); 
     //set4 = new BarDataSet(yVals4, "Company D"); 
     // set4.setColor(Color.rgb(255, 102, 0)); 

     BarData data = new BarData(set1, set2); 
     data.setValueFormatter(new LargeValueFormatter()); 
     data.setValueTypeface(mTfLight); 

     mChart.setData(data); 
    } 

    // specify the width each bar should have 
    mChart.getBarData().setBarWidth(barWidth); 

    // restrict the x-axis range 
    mChart.getXAxis().setAxisMinimum(startYear); 

    // barData.getGroupWith(...) is a helper that calculates the width each group needs based on the provided parameters 
    mChart.getXAxis().setAxisMaximum(startYear + mChart.getBarData().getGroupWidth(groupSpace, barSpace) * groupCount); 
    mChart.groupBars(startYear, groupSpace, barSpace); 
    mChart.invalidate(); 
} 

@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 
    // TODO Auto-generated method stub 
} 
@Override 
public void onStopTrackingTouch(SeekBar seekBar) { 
    // TODO Auto-generated method stub 
} 
@Override 
public void onValueSelected(Entry e, Highlight h) { 
    Log.i("Activity", "Selected: " + e.toString() + ", dataSet: " + h.getDataSetIndex()); 
} 
@Override 
public void onNothingSelected() { 
    Log.i("Activity", "Nothing selected."); 
}} 

답변

0

나는 당신이 이것이다 기대하는 것을 생각 하나 라이너 : setPosition의 문서에서

mChart.getXAxis().setPosition(XAxis.XAxisPosition.TOP); 

:

는 응답

+0

덕분에 내가이 줄 mChart.getXAxis()의 문제를 해결할 수있는 X-라벨의 위치를 ​​설정 setAxisMaximum (2014).; –

관련 문제