Я пытаюсь поместить линейную диаграмму MP в мою относительную схему.но проблема в том, что когда я запускаю его на своем телефоне или эмуляторе, нет содержимого (диаграмма не отображается). Я пытался это исправить, но безуспешно. Пожалуйста, помогите мне, мне действительно нужна ваша помощь. Спасибо.
в этом приложении я пытаюсь подделать набор точек, чтобы график выглядел реально.
ниже - это мое основное действие, и оно xml
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.github.mikephil.charting.charts.LineChart;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
ChartHelper mChart;
LineChart chart;
@Override
public void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chart = findViewById(R.id.graph);
mChart = new ChartHelper(chart);
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 5; j++) {
TimeUnit.SECONDS.sleep(1);
mChart.addEntry(Float.valueOf(26));
}
for (int j = 0; j < 5; j++) {
TimeUnit.SECONDS.sleep(1);
mChart.addEntry(Float.valueOf(27));
}
TimeUnit.SECONDS.sleep(1);
mChart.addEntry(Float.valueOf(25));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ниже мой xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layoutmain"
android:visibility="visible"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/graph"
android:layout_width="600dp"
android:layout_height="300dp"
android:visibility="visible" />
</RelativeLayout>
и ниже мой класс ChartHelper
import android.graphics.Color;
import android.graphics.Typeface;
import android.util.Log;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
public class ChartHelper implements OnChartValueSelectedListener {
private LineChart mChart;
public ChartHelper(LineChart chart) {
mChart = chart;
mChart.setOnChartValueSelectedListener(this);
// no description text
mChart.setNoDataText("You need to provide data for the chart.");
// enable touch gestures
mChart.setTouchEnabled(true);
// enable scaling and dragging
mChart.setDragEnabled(true);
mChart.setScaleEnabled(true);
mChart.setDrawGridBackground(false);
// if disabled, scaling can be done on x- and y-axis separately
mChart.setPinchZoom(true);
// set an alternative background color
mChart.setBackgroundColor(Color.WHITE);
mChart.setBorderColor(Color.rgb(67,164,34));
LineData data = new LineData();
data.setValueTextColor(Color.WHITE);
// add empty data
mChart.setData(data);
// get the legend (only possible after setting data)
Legend l = mChart.getLegend();
// modify the legend ...
// l.setPosition(LegendPosition.LEFT_OF_CHART);
l.setForm(Legend.LegendForm.LINE);
l.setTypeface(Typeface.MONOSPACE);
l.setTextColor(Color.rgb(67, 164, 34));
XAxis xl = mChart.getXAxis();
xl.setTypeface(Typeface.MONOSPACE);
xl.setTextColor(Color.rgb(67, 164, 34));
xl.setDrawGridLines(false);
xl.setAvoidFirstLastClipping(true);
xl.setEnabled(true);
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setTypeface(Typeface.MONOSPACE);
leftAxis.setTextColor(Color.rgb(67, 164, 34));
leftAxis.setDrawGridLines(true);
YAxis rightAxis = mChart.getAxisRight();
rightAxis.setEnabled(false);
}
public void setChart(LineChart chart){ this.mChart = chart; }
public void addEntry(float value) {
LineData data = mChart.getData();
if (data != null){
ILineDataSet set = data.getDataSetByIndex(0);
// set.addEntry(...); // can be called as well
if (set == null) {
set = createSet();
data.addDataSet(set);
}
data.addEntry(new Entry(set.getEntryCount(),value),0);
Log.w("anjing", set.getEntryForIndex(set.getEntryCount()-1).toString());
data.notifyDataChanged();
// let the chart know it's data has changed
mChart.notifyDataSetChanged();
// limit the number of visible entries
mChart.setVisibleXRangeMaximum(10);
// mChart.setVisibleYRange(30, AxisDependency.LEFT);
// move to the latest entry
mChart.moveViewTo(set.getEntryCount()-1, data.getYMax(), YAxis.AxisDependency.LEFT);
// this automatically refreshes the chart (calls invalidate())
// mChart.moveViewTo(data.getXValCount()-7, 55f,
// AxisDependency.LEFT);
}
}
private LineDataSet createSet() {
LineDataSet set = new LineDataSet(null, "Data");
set.setAxisDependency(YAxis.AxisDependency.LEFT);
set.setColor(Color.rgb(67, 164, 34));
//set.setCircleColor(Color.WHITE);
set.setLineWidth(2f);
//set.setCircleRadius(4f);
set.setFillAlpha(65);
set.setFillColor(Color.rgb(67, 164, 34));
set.setHighLightColor(Color.rgb(67, 164, 34));
set.setValueTextColor(Color.rgb(67, 164, 34));
set.setValueTextSize(9f);
set.setDrawValues(false);
return set;
}
@Override
public void onValueSelected(Entry e, Highlight h) {
Log.i("Entry selected", e.toString());
}
@Override
public void onNothingSelected(){
Log.i("Nothing selected", "Nothing selected.");
}
}