本文实例为大家分享了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);
}
}
}