【Android】 折线图绘制实时数据

2019-12-04  本文已影响0人  urkay

让Chart动起来,显示实时数据

implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'

在Activity中调用

class TestsssActivity : AppCompatActivity() {
    var i=0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_testsss)

        val char=ChartUtils()
        char.initStateChart(chart_test)
        Thread(Runnable {
            kotlin.run {
                while (true){
                    i++
                    char.addEntry("第${i}", ((1+Math.random()*10)*i).toInt())
                    sleep(1000)
                }
            }
        }).start()
    }
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/chart_test"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

ChartUtils 方法

public class ChartUtils {
    private LineChart lineChart;
    private LineData mLineData;
    private List<Entry> lineList=new ArrayList<>();
    private List<String> xData=new ArrayList<>();


    public void initStateChart(LineChart chart) {
        lineChart=chart;
        lineChart.setBackgroundColor(Color.rgb(255, 255, 255));
        // 不可以缩放
        lineChart.setScaleEnabled(false);

        //新建空数据
        LineDataSet dataSet = new LineDataSet(lineList, "设备总数");
        //线条颜色
        dataSet.setColor(Color.parseColor("#60B0F2"));
        //圆点颜色
        dataSet.setCircleColor(Color.parseColor("#60B0F2"));
        dataSet.setCircleRadius(1.5f);
        dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        dataSet.setFillColor(Color.parseColor("#60B0F2"));
        dataSet.setFillAlpha(50);
        //线条宽度
        dataSet.setLineWidth(1f);

        //设置x轴、y轴样式
        YAxis rightAxis = lineChart.getAxisRight();
        YAxis leftAxis = lineChart.getAxisLeft();
        //保证Y轴从0开始,不然会上移一点
        leftAxis.setAxisMinimum(0f);
        rightAxis.setAxisMinimum(0f);
        //设置图表右边的y轴禁用
        rightAxis.setEnabled(false);
        //设置图表左边的y轴禁用
        //设置x轴
        XAxis xAxis = lineChart.getXAxis();
        xAxis.setTextColor(Color.parseColor("#333333"));
        xAxis.setTextSize(11f);
        xAxis.setAxisMinimum(0f);
        //是否绘制轴线
        xAxis.setDrawAxisLine(true);
        //设置x轴上每个点对应的线
        xAxis.setDrawGridLines(true);
        //绘制标签  指x轴上的对应数值
        xAxis.setDrawLabels(true);
        //设置x轴的显示位置
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //禁止放大后x轴标签重绘
        xAxis.setGranularity(1f);
        //自定义x轴值
        xAxis.setValueFormatter(LineXiavf0);
        //图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘
        xAxis.setAvoidFirstLastClipping(true);

        Legend l = lineChart.getLegend();
        l.setForm(Legend.LegendForm.LINE);
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
        l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        l.setDrawInside(false);

        //chart设置数据
        mLineData = new LineData(dataSet);
        //是否绘制线条上的文字
        mLineData.setDrawValues(true);

        lineChart.setData(mLineData);
        lineChart.animateX(500);
        lineChart.setNoDataText("暂无数据");
        lineChart.invalidate();
    }
    //自定义x轴值
    private ValueFormatter LineXiavf0 = new ValueFormatter() {
        @Override
        public String getFormattedValue(float value) {
            int p = (int) value;
            if (p < xData.size() && p > -1) {
                return xData.get(p);
            } else {
                return "";
            }
        }
    };
    //添加数据
    public void addEntry(String xValue,int yValue){
        //添加x轴值
        xData.add(xValue);
        //添加y轴值
        Entry entry = new Entry(xData.size(), yValue);
        mLineData.addEntry(entry, 0);
        //数据刷新
        mLineData.notifyDataChanged();
        //char图标刷新
        lineChart.notifyDataSetChanged();
        //x轴显示最大个数
        lineChart.setVisibleXRangeMaximum(10);
        //x轴移动
        lineChart.moveViewToAnimated(xData.size(),0, YAxis.AxisDependency.RIGHT,500);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读