2017-08-31 1 views
1

x軸に沿った時間とy軸に沿った領域を持つグラフを作成する必要があります。このプログラムは、アクティビティの特定の時間差でデータを記録し、このようなグラフのデータを表示します。 - >https://i.stack.imgur.com/s4MiC.pngですが、他のすべてのバーが別のアクティビティに対応するように交互に表示されます。私はまだMPAndroidChartを使用してこれを行う方法を見つけることができなかった、各エントリは固定幅を持つようだ。誰かがMPAndroidChartや他のオープンソースライブラリのヘルプを利用してこれを達成する方法を知っていれば、感謝します!さまざまなバー幅を持つMPAndroidChart棒グラフ

EDIT:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_data_report); 

    BarChart barChart = (BarChart) findViewById(R.id.barChart); 
    List<BarEntry> entries = generateBarEntries(); 
    BarDataSet set = new BarDataSet(entries, "BarDataSet"); 
    BarData data = new BarData(set); 
    barChart.setData(data); 
} 

private List<BarEntry> generateBarEntries() { 
    List<BarEntry> entries = new ArrayList<>(); 
    for (int i = 0; i < timeValues.size(); i++) { 
     float x = timeValues.get(i); 
     float y = areaValues.get(i); 
     entries.add(new BarEntry(x, y)); 
    } 
    return entries; 
} 

timeValues例えば[3、9、21、26、33秒の値とのArrayListである:

これは私がで動作するようにしようとしてきたコードであります]とareaValuesもtimeValuesと同じサイズのArrayListで、各値は30です(つまり[30,30,30,30,30])。

+0

これまでに試したことのコードを投稿してください。 – petryuno1

+0

@ petryuno1編集済み投稿を表示 –

答えて

2

わかりましたので、私はこれについてどうやって行くのか考え出しました。棒グラフを作成する代わりに、私は水平線で線グラフを作成し、各行の下の領域に塗りつぶしました。

LineChart timeChart = (LineChart) findViewById(R.id.timeChart); 
List<ILineDataSet> dataSets = generateLineData(); 
LineData data = new LineData(dataSets); 
timeChart.setData(data); 
timeChart.invalidate(); 

private List<ILineDataSet> generateLineData() { 
    List<ILineDataSet> dataSets = new ArrayList<>(); 
    for (int i = 0; i < areaValues.size(); i++) { 
     List<Entry> barPoints = new ArrayList<>(); 
     Entry barPoint1; 
     Entry barPoint2; 
     LineDataSet dataSet; 
     if (areaValues.get(i) >= 0) { 
      barPoint1 = new Entry(timeValues.get(i), areaValues.get(i)); 
      barPoint2 = new Entry(timeValues.get(i+1), areaValues.get(i)); 
      barPoints.add(barPoint1); 
      barPoints.add(barPoint2); 
      dataSet = new LineDataSet(barPoints, ""); 
      dataSet.setColor(getResources().getColor(R.color.green)); 
      dataSet.setFillDrawable(ContextCompat.getDrawable(this, R.color.green)); 
     } 
     dataSet.setDrawCircles(false); 
     dataSet.setDrawFilled(true); 
     dataSet.setDrawValues(false); 
     dataSets.add(dataSet); 
    } 
    return dataSets; 
} 

素晴らしい作品です。

+0

**あなたの** areaValues **と** timeValues **のサンプルを教えてもらえますか? –

+0

ありがとう... –

+0

@RahulSharma areaValuesは私の目的のためにランダムに生成された数字でした。 timeValuesは毎回増分する必要があり、timeValuesは常にareaValuesより1つ多いエントリを持つ必要があります。サンプル値は次のとおりです: timeValues = [0,12,15,19,33] areaValues = [20,9,12,16] –

0

Sample, what i did

これを達成するための簡単な方法はありません。 MPAndroidChartのbarchartソースコードを掘り下げ、BarBufferというクラスを見つけなければなりません。 addBar()というメソッドがあります。バーの幅を変更することができます。私の例では、私はまだ24の独立したバーがありますが、幅を変更すると、大きなブロックのように見えるようになります。

protected void addBar(float left, float top, float right, float bottom) { 

    buffer[index++] = left; 
    buffer[index++] = top; 
    buffer[index++] = right; 
    buffer[index++] = bottom; 
} 
関連する問題