Android Studio平台下使用hellochart实现从txt文件读取数据绘折线图
2018-11-12 11:27
218 查看
Android Studio平台下使用hellochart实现从文本读取数据绘折线图
本人是一个刚刚接触Android不超过两个月的小白,最近在做的论文是关于这一块的相关内容。所有的东西都是自学的,听导师的建议也是第一次留个这样的资料,可能有很多地方理解不到位,也欢迎大家给我更多的建议,让我学习进步。
首先先导入了一个第三方包:hellocharts-library-1.5.8.jar,目的是用来绘图。然后在res文件夹下新建raw文件夹,在raw文件夹内放入文本数据,我自己这里是a.txt
a.txt内是从串口接收到的数据再保存下来的,这一块因为是从学长那里接手的,目前还没太搞懂,留待以后解决。现在还是回来读取数据在绘折线图这一块。
/** * 初始化表格设置 */ private void initLineChart() { Line line =new Line(mPointValues).setColor(Color.BLUE);//将数据点填充到线上,并设置线的颜色为蓝色 List<Line> lines = new ArrayList<Line>(); //创建了一个ArrayList对象;<>用于向参数化类 // 型传递参数;传递进入一个Line类型的变量作为参数,详细可见泛型 // List是Collection接口的子接口 List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列。 line.setShape(ValueShape.CIRCLE); //折线上每个数据点的形状,设置为圆形 line.setCubic(false); //曲线是否圆滑 line.setFilled(false); //是否填充曲线的面积 line.setHasLabels(true);//曲线的数据坐标是否加上备注 line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效) line.setHasLines(true);//是否用线显示。如果为false 则没有曲线只有点显示 line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示(每个数据点都是个大的圆点) lines.add(line);//个人理解,将以上设置的 应用对象“line”的字段传给"lines" LineChartData data = new LineChartData(); data.setLines(lines);//以上三行代码,均为导入折线的初始设置 //坐标轴 Axis axisX = new Axis();//创建X轴的引用变量 Axis axisY = new Axis();//Y轴 axisX.setName("道址数"); axisY.setName("计数"); data.setAxisXBottom(axisX);//X轴设置在底部 data.setAxisYLeft(axisY);//Y轴设置在左侧 //数据添加 data.setBaseValue(Float.NEGATIVE_INFINITY); lineChart.setLineChartData(data); //设置平行缩放等行为属性 lineChart.setInteractive(true); lineChart.setZoomType(ZoomType.HORIZONTAL_AND_VERTICAL);//水平跟垂直方向上的放大 lineChart.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL); //上一行代码为设置水平方向可以滚动 lineChart.setVisibility(View.VISIBLE); //动画效果 // prepareDataAnimation(); lineChart.startDataAnimation(1000); }
初始化表格属性完成之后,就是添加数据,具体代码如下:
/** * 设置X 轴的显示 */ private void getAxisXLables(){ for (int i = 0; i < Xdate.length; i++) { mAxisXValues.add(new AxisValue(i).setLabel(Xdate[i])); } }
/** * 图表的每个点的显示 */ private void getAxisPoints() { for (int i = 0; i < showdata.length; i++) { mPointValues.add(new PointValue(i, showdata[i])); } }
最后是从文件中读取数据:
public String getString (InputStream inputStream) { InputStreamReader inputStreamReader = null; try { inputStreamReader = new InputStreamReader(inputStream, "gbk"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } BufferedReader reader = new BufferedReader(inputStreamReader); //创建一个输入流 StringBuffer sb = new StringBuffer(); String line; try { while ((line = reader.readLine()) != null) { sb.append(line); sb.append("\n"); } } catch (IOException e) { e.printStackTrace(); } score=sb.toString(); return sb.toString(); } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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" tools:context=".MainActivity"> <lecho.lib.hellocharts.view.LineChartView android:id="@+id/chart_01" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.constraint.ConstraintLayout>
最后,整个Mainactivity.java放上来,里面有部分内容还在测试,是为后续的算法做的准备,例如HashMap这一块。
package com.example.administrator.exchangetype; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; 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.view.LineChartView; - public class MainActivity extends AppCompatActivity { //折线图 private LineChartView lineChart; private List<PointValue> mPointValues = new ArrayList<PointValue>(); private List<AxisValue> mAxisXValues = new ArrayList<AxisValue>(); static String score; String[] Xdate=new String[1023]; int[] showdata=new int[1023]; int anum; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lineChart = (LineChartView) findViewById(R.id.chart_01); InputStream inputStream = getResources().openRawResource(R.raw.a); getString(inputStream); for (anum=0;anum<1023;anum++){ Xdate[anum]= anum+""; } String ss[] = score.split(" "); byte scorechang[] = new byte[ss.length]; for (int i = 0; i < ss.length-1; i++) { scorechang[i] = (byte) Integer.parseInt(ss[i],16); showdata[i]=(int)scorechang[i]; } // tvtext.setText(scorechang.toString()); 测试用 initLineChart();//初始化设置 getAxisPoints();//X轴的显示 //paixv Map<String,Integer> map = new HashMap<>(); for(String str : ss ){ Integer num = map.get(str); map.put(str,num == null ? 1 : num + 1); } Set set = map.entrySet(); Iterator it = set.iterator(); while (it.hasNext()){ Map.Entry<String,Integer> entry =(Map.Entry<String, Integer>)it.next(); System.out.println("单词 " + entry.getKey() + " 出现次数 : " + entry.getValue()); } } /** * 初始化表格设置 */ private void initLineChart() { Line line =new Line(mPointValues).setColor(Color.BLUE);//将数据点填充到线上,并设置线的颜色为蓝色 List<Line> lines = new ArrayList<Line>(); //创建了一个ArrayList对象;<>用于向参数化类 // 型传递参数;传递进入一个Line类型的变量作为参数,详细可见泛型 // List是Collection接口的子接口 List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列。 line.setShape(ValueShape.CIRCLE); //折线上每个数据点的形状,设置为圆形 line.setCubic(false); //曲线是否圆滑 line.setFilled(false); //是否填充曲线的面积 line.setHasLabels(true);//曲线的数据坐标是否加上备注 line.setHasLabelsOnlyForSelected(true);//点击数据坐标提示数据(设置了这个line.setHasLabels(true);就无效) line.setHasLines(true);//是否用线显示。如果为false 则没有曲线只有点显示 line.setHasPoints(true);//是否显示圆点 如果为false 则没有原点只有点显示(每个数据点都是个大的圆点) lines.add(line);//个人理解,将以上设置的 应用对象“line”的字段传给"lines" LineChartData data = new LineChartData(); data.setLines(lines);//以上三行代码,均为导入折线的初始设置 //坐标轴 Axis axisX = new Axis();//创建X轴的引用变量 Axis axisY = new Axis();//Y轴 axisX.setName("道址数"); axisY.setName("计数"); data.setAxisXBottom(axisX);//X轴设置在底部 data.setAxisYLeft(axisY);//Y轴设置在左侧 //数据添加 data.setBaseValue(Float.NEGATIVE_INFINITY); lineChart.setLineChartData(data); //设置平行缩放等行为属性 lineChart.setInteractive(true); lineChart.setZoomType(ZoomType.HORIZONTAL_AND_VERTICAL);//水平跟垂直方向上的放大 lineChart.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL); //上一行代码为设置水平方向可以滚动 lineChart.setVisibility(View.VISIBLE); //动画效果 // prepareDataAnimation(); lineChart.startDataAnimation(1000); } /** * 图表的每个点的显示 */ private void getAxisPoints() { for (int i = 0; i < showdata.length; i++) { mPointValues.add(new PointValue(i, showdata[i])); } } /** * 设置X 轴的显示 */ private void getAxisXLables(){ for (int i = 0; i < Xdate.length; i++) { mAxisXValues.add(new AxisValue(i).setLabel(Xdate[i])); } }public String getString (InputStream inputStream) { InputStreamReader inputStreamReader = null; try { inputStreamReader = new InputStreamReader(inputStream, "gbk"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } BufferedReader reader = new BufferedReader(inputStreamReader); //创建一个输入流 StringBuffer sb = new StringBuffer(); String line; try { while ((line = reader.readLine()) != null) { sb.append(line); sb.append("\n"); } } catch (IOException e) { e.printStackTrace(); } score=sb.toString(); return sb.toString(); } }
我使用的Android Studio版本是3.1.2,Gradle版本4.4,使用Android 8.0,华为mate8真机与模拟器都进行过测试。文件放在网盘:https://pan.baidu.com/s/114jzmu3mp5pvwGON3OlQVg
相关文章推荐
- 【java IO】使用Java输入输出流 读取txt文件内数据,进行拼接后写入到另一个文件中
- 使用POI实现上传ecxel文件,并读取其中数据并存入数据库
- 怎么用c语言实现读取一个txt文件里的数据 要按行读出来
- Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
- asp.net实现从Txt文件读取数据到数据视图的方法
- 设计一个学生类,其中包含学号、姓名、成绩等数据成员,创建学生对象并且倒入到文件file.txt,然后由文件读取到另一个学生对象并输出,试编程实现。
- C++类中包含string类型数据使用read和write实现文件读取和输出时遇到的问题
- java实现读取txt文件并以在每行以空格取数据
- openfiledialog 使用 读取txt文件 StreamReader 检验数据
- asp.net实现从Txt文件读取数据到数据视图的方法
- java 读取文件——按照行取出(使用BufferedReader和一次将数据保存到内存两种实现方式)
- asp.net实现从Txt文件读取数据到数据视图的方法
- 9-18 ASP第二讲实现数据的真实操作,从txt文件中读取进行校对,判断登陆是否成功
- 从txt文件逐行读取数据到excel文件(包含POI的简单使用和excel文件的数据分列,出现次数统计)
- 使用Java读取xlxs文件和写入txt文件,并将数据写入到本地文件
- 使用java语言将数组中的数据写入txt文件,然后读取
- C++实现对于TXT数据文件的读取
- Python实现读取txt文件中的数据并绘制出图形操作示例
- 《程序实现》从xml、txt文件里读取数据写入excel表格
- Python 实现如何把txt文件中的数据(可以是文本型数据,也可以是数值型数据)读取出来放在numpy类型的数组中