之前也写过一个折线图,但是感觉在浮点数处理上不够完美,这是修订版,啥也不说了直接上效果图:
该折线图主要实现的功能为:
接收一个长度为7的利率集合,利率对象包含两个字段,一个是利率值,如2.174,另一个为该值对应的日期,如:2017-06-28
实际上上图的集合为:
public static ArrayList<FutureEntity> getTestData(){
ArrayList<FutureEntity> arr=new ArrayList<FutureEntity>();
FutureEntity en1=new FutureEntity();
en1.setIssDate("2017-06-29");
en1.setYield(Float.valueOf("2.174"));
FutureEntity en2=new FutureEntity();
en2.setIssDate("2017-06-30");
en2.setYield(Float.valueOf("2.657"));
FutureEntity en3=new FutureEntity();
en3.setIssDate("2017-07-01");
en3.setYield(Float.valueOf("4.325"));
FutureEntity en4=new FutureEntity();
en4.setIssDate("2017-07-02");
en4.setYield(Float.valueOf("3.175"));
FutureEntity en5=new FutureEntity();
en5.setIssDate("2017-07-03");
en5.setYield(Float.valueOf("1.583"));
FutureEntity en6=new FutureEntity();
en6.setIssDate("2017-07-04");
en6.setYield(Float.valueOf("2.970"));
FutureEntity en7=new FutureEntity();
en7.setIssDate("2017-07-05");
en7.setYield(Float.valueOf("3.336"));
arr.add(en7);
arr.add(en6);
arr.add(en5);
arr.add(en4);
arr.add(en3);
arr.add(en2);
arr.add(en1);
return arr;
}
ArrayList<FutureEntity> arr=new ArrayList<FutureEntity>();
FutureEntity en1=new FutureEntity();
en1.setIssDate("2017-06-29");
en1.setYield(Float.valueOf("2.174"));
FutureEntity en2=new FutureEntity();
en2.setIssDate("2017-06-30");
en2.setYield(Float.valueOf("2.657"));
FutureEntity en3=new FutureEntity();
en3.setIssDate("2017-07-01");
en3.setYield(Float.valueOf("4.325"));
FutureEntity en4=new FutureEntity();
en4.setIssDate("2017-07-02");
en4.setYield(Float.valueOf("3.175"));
FutureEntity en5=new FutureEntity();
en5.setIssDate("2017-07-03");
en5.setYield(Float.valueOf("1.583"));
FutureEntity en6=new FutureEntity();
en6.setIssDate("2017-07-04");
en6.setYield(Float.valueOf("2.970"));
FutureEntity en7=new FutureEntity();
en7.setIssDate("2017-07-05");
en7.setYield(Float.valueOf("3.336"));
arr.add(en7);
arr.add(en6);
arr.add(en5);
arr.add(en4);
arr.add(en3);
arr.add(en2);
arr.add(en1);
return arr;
}
注意这里的倒序: 通常这组数据在服务端返回时是一个倒序的情况,即最靠近当前日期的数据在集合的第0个,当然这个处理你可以跟服务端的人商量让他们排序,但是如果他们没排序,我们自己这边也提供了排序方法。
我们得到未排序的数组后,在自己的Activity中直接使用如下代码即可初始化折线图:
/**
* 将数据拆分成折线图控件需要的数据
* 需要四组数据包括 利率点集Y值 X轴坐标值 利率最大值 利率最小值
* @param list
*/
protected void changeListForBrokenLine(ArrayList<FutureEntity> list) {
// TODO Auto-generated method stub
// LogUtil.e(this,list.toString());
// ArrayList<FutureEntity> list1 = NumberUtils.sortList(list,"Yield","ASC"); //这里是排序方法,但是因为我们实际上拿值是从后往前拿,所以暂时没有用排序
listY.addAll(NumberUtils.getListY(list));//取值的时候我们是从后往前取,所以这里拿到的是正确的序列
arrx.addAll(NumberUtils.getArrX(list));
max=NumberUtils.getTheMax(list);
min=NumberUtils.getTheMin(list);
brokenline.drawBrokenLine(listY, arrx, max, min);
}
* 将数据拆分成折线图控件需要的数据
* 需要四组数据包括 利率点集Y值 X轴坐标值 利率最大值 利率最小值
* @param list
*/
protected void changeListForBrokenLine(ArrayList<FutureEntity> list) {
// TODO Auto-generated method stub
// LogUtil.e(this,list.toString());
// ArrayList<FutureEntity> list1 = NumberUtils.sortList(list,"Yield","ASC"); //这里是排序方法,但是因为我们实际上拿值是从后往前拿,所以暂时没有用排序
listY.addAll(NumberUtils.getListY(list));//取值的时候我们是从后往前取,所以这里拿到的是正确的序列
arrx.addAll(NumberUtils.getArrX(list));
max=NumberUtils.getTheMax(list);
min=NumberUtils.getTheMin(list);
brokenline.drawBrokenLine(listY, arrx, max, min);
}
其余方法已经整成一个demo,可以去http://download.csdn.net/detail/xiangxiang_8_8/9911812免费下载