本文实例为大家分享了Android利用HelloChart绘制曲线的具体代码,供大家参考,具体内容如下
1、将jar包放到app下的libs文件夹中
2、build.gradle(app):
implementation files('libs\\hellocharts-library-1.5.8.jar')3、MainActivity.java
package com.dj.drawlinestest;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import lecho.lib.hellocharts.gesture.ContainerScrollType;
import lecho.lib.hellocharts.gesture.ZoomType;
import lecho.lib.hellocharts.model.Axis;
import lecho.lib.hellocharts.model.AxisValue;
import lecho.lib.hellocharts.model.Line;
import lecho.lib.hellocharts.model.LineChartData;
import lecho.lib.hellocharts.model.PointValue;
import lecho.lib.hellocharts.model.ValueShape;
import lecho.lib.hellocharts.model.Viewport;
import lecho.lib.hellocharts.view.LineChartView;
public class MainActivity extends AppCompatActivity {
    LineChartView lineChart;
    Random mRandom;
    Handler mHandler;
    MyRunnable mRunnable;
    DrawLinesUtil mDrawLinesUtil;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRandom = new Random();
        lineChart = findViewById(R.id.LineChart);
        mDrawLinesUtil = new DrawLinesUtil(lineChart);
        mRunnable = new MyRunnable();
        mHandler = new Handler();
        mHandler.postDelayed(mRunnable, 0);
    }
    private class MyRunnable implements Runnable {
        @Override
        public void run() {
            Integer number = Math.abs(mRandom.nextInt()) % 50   50;
            mDrawLinesUtil.updateLocNumList(number);
            mDrawLinesUtil.display_chart();
            mHandler.postDelayed(this, 1000);
        }
    }
}4、activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <lecho.lib.hellocharts.view.LineChartView android:id="@ id/LineChart" android:layout_width="match_parent" android:layout_height="500dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:alpha="0.6"></lecho.lib.hellocharts.view.LineChartView> </LinearLayout>
5、工具类:
DrawLinesUtil.java
package com.dj.drawlinestest;
import android.graphics.Color;
import android.view.View;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import lecho.lib.hellocharts.gesture.ContainerScrollType;
import lecho.lib.hellocharts.gesture.ZoomType;
import lecho.lib.hellocharts.model.Axis;
import lecho.lib.hellocharts.model.AxisValue;
import lecho.lib.hellocharts.model.Line;
import lecho.lib.hellocharts.model.LineChartData;
import lecho.lib.hellocharts.model.PointValue;
import lecho.lib.hellocharts.model.ValueShape;
import lecho.lib.hellocharts.model.Viewport;
import lecho.lib.hellocharts.view.LineChartView;
public class DrawLinesUtil {
    LineChartView lineChart;
    private boolean inited;
    private int pointNumber;
    private List<PointValue> mPointValues ;
    private List<AxisValue>  mAxisXValues ;
    private List<Integer>    mLocNumList  ;
    /**
     * 构造函数
     * @param lineChart
     */
    public DrawLinesUtil(LineChartView lineChart) {
        this.lineChart = lineChart;
        this.inited = false;
        this.pointNumber = 60; //  默认显示60个点
        this.mPointValues    = new ArrayList<>();  // 数据点
        this.mAxisXValues    = new ArrayList<>();  // X轴标注
        this.mLocNumList     = new LinkedList<>(); // 数据源
    }
    /**
     * set  get
     * @return
     */
    public int getPointNumber() {
        return pointNumber;
    }
    public void setPointNumber(int pointNumber) {
        this.pointNumber = pointNumber;
    }
    public LineChartView getLineChart() {
        return lineChart;
    }
    public void setLineChart(LineChartView lineChart) {
        this.lineChart = lineChart;
    }
    public List<Integer> getLocNumList() {
        return mLocNumList;
    }
    /**
     * 供外部调用 添加数据
     * @param number
     */
    public void updateLocNumList(Integer number){
        if (mLocNumList.size() >= pointNumber) {
            mLocNumList.remove(0);
        }
        mLocNumList.add(number);
    }
    /**
     * 供外部调用 画曲线
     */
    public void display_chart()
    {
        if( ! inited ){
            setAttribute();
        }
        getXLables();
        getPoints();
        draw_linechart();
    }
    /**
     * 设置行为属性,支持缩放、滑动以及平移
     */
    private void setAttribute(){
        lineChart.setInteractive(true);
        lineChart.setZoomType(ZoomType.HORIZONTAL);
        lineChart.setMaxZoom((float) 2);//最大方法比例
        lineChart.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL);
        lineChart.setVisibility(View.GONE);
        inited = true;
    }
    /**
     * 设置X轴的显示
     */
    private void getXLables(){
        mAxisXValues.clear();
        for (int i = 0; i < mLocNumList.size(); i  ) {
            mAxisXValues.add(new AxisValue(i).setLabel(""));//这里设置x轴的内容
        }
    }
    /**
     * 图表的每个点的显示
     */
    private void getPoints() {
        mPointValues.clear();
        //Log.v(TAG,"getPoints" mLocNumList.size());
        for (int i = 0; i < mLocNumList.size(); i  ) {
            mPointValues.add(new PointValue(i, mLocNumList.get(i)));
        }
    }
    /**
     * 内部方法 画曲线
     */
    private void draw_linechart(){
        Line line = new Line(mPointValues).setColor(Color.parseColor("#FFCD41"));//("#FFCD41"));  //折线的颜色(橙色)
        List<Line> lines = new ArrayList<>();
        line.setShape(ValueShape.CIRCLE);//折线图上每个数据点的形状  这里是圆形 (有三种 :ValueShape.SQUARE  ValueShape.CIRCLE  ValueShape.DIAMOND)
        line.setCubic(true);//曲线是否平滑,即是曲线还是折线
        line.setFilled(true);//是否填充曲线的面积
        line.setHasLabels(false);//曲线的数据坐标是否加上备注
        line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效)
        line.setHasLines(true);//是否用线显示。如果为false 则没有曲线只有点显示
        line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示(每个数据点都是个大的圆点)
        line.setPointRadius(3);
        lines.add(line);
        LineChartData data = new LineChartData();
        data.setLines(lines);
        //坐标轴
        Axis axisX = new Axis(); //X轴
        axisX.setTextSize(0);//设置字体大小
        //axisX.setMaxLabelChars(20); //最多几个X轴坐标,意思就是你的缩放让X轴上数据的个数7<=x<=mAxisXValues.length
        axisX.setValues(mAxisXValues);  //填充X轴的坐标名称
        data.setAxisXBottom(axisX); //x 轴在底部
        //data.setAxisXTop(axisX);  //x 轴在顶部
        // axisX.setHasLines(true); //x 轴分割线
        // Y轴是根据数据的大小自动设置Y轴上限(在下面我会给出固定Y轴数据个数的解决方案)
        Axis axisY = new Axis();  //Y轴
        axisY.setName("");//y轴标注
        axisY.setTextSize(8);//设置字体大小
        data.setAxisYLeft(axisY);  //Y轴设置在左边
        //axisY.setHasLines(true); //Y轴分割线
        //设置行为属性,支持缩放、滑动以及平移
        lineChart.setInteractive(true);
        lineChart.setZoomType(ZoomType.HORIZONTAL);
        lineChart.setMaxZoom((float) 2);//最大方法比例
        lineChart.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL);
        lineChart.setLineChartData(data);
        lineChart.setVisibility(View.VISIBLE);
        Viewport v2 = new Viewport(lineChart.getMaximumViewport());
        v2.top    = 100;
        v2.bottom = 0;
        if (mLocNumList.size()>24) {
            lineChart.setMaximumViewport(v2);
            Viewport v = new Viewport(lineChart.getMaximumViewport());
            v.left = mLocNumList.size() - 24-1;
            lineChart.setCurrentViewport(v);
        }else
        {
            v2.right  = 24;
            lineChart.setMaximumViewport(v2);
            lineChart.setCurrentViewport(v2);
        }
    }
}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Devmax。