最近使用MPchart来绘制图表,在创建实体点的时候,横纵坐标轴只能够是float类型,这对于要表示的时间就很难处理了,因为要精确到秒,so,需要处理一下x轴表示方法。
举个栗子:
现在需要表示的横坐标是 苹果/香蕉/梨子/西瓜
但是在创建坐标的时候,是根据数字来绘制横坐标的距离的,如果一开始告诉坐标轴 ,我要绘制 “ 苹果/香蕉/梨子/西瓜“,坐标轴是无法判断这些点之间的距离的。所以在绘制坐标图的时候,先确定x轴之间的距离,如果要等距, 可以将 “ 苹果/香蕉/梨子/西瓜“ 分别与 ”1/2/3/4“几个数字对应。
创建出实体点,对应为:
(苹果,y1)—->(1,y1)
(香蕉,y2)—->(1,y1)
(梨子,y3)—->(1,y1)
(西瓜,y4)—->(1,y1)
values.add(new Entry(x, y));//Entry(x,y)就是绘制的实体点
我的问题:
创建实体点的时候使用时间戳将时间转变成数字类型,但是看了官方demo,有一句
long now = TimeUnit.MILLISECONDS.toMillis(System.currentTimeMillis())//将时间戳只精确到小时 本来是可以精确到毫秒的
我想试试能不能直接使用System.currentTimeMillis() 作为坐标创建实体点,但是失败了
原因应该是超出了float的计数范围。
这一步就是通过自己创建的实体点对应出真正想表现出来的横轴的数字,这个过程就是与上一过程逆转的;
效果如下
(1,y1)—->(苹果,y1)
(1,y1)—->(香蕉,y2)
(1,y1)—->(梨子,y3)
(1,y1)—->(西瓜,y4)
具体过程是
XAxis xAxis = mChart.getXAxis();
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
//在此处判断数字与要表示的水果的对应关系
if (value == 1){
return "苹果";
}else if (value == 2){
return "香蕉";
}else if (value == 3){
return "梨子";
}else if (value == 4){
return "西瓜";
}else {
return "哈哈";
}
}
@Override
public int getDecimalDigits() {
return 0;
}
});
我的问题解决方法:
XAxis xAxis = mChart.getXAxis();
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
//在此处判断数字与要表示的水果的对应关系
long now0 = (long) value;
//取出小时
int hour = (int)Math.floor(now0/10000);
//取出分钟
int minute =(int) Math.floor((now0-hour*10000)/100);
//取出秒数
int second = (int)now0-hour*10000-minute*100;
String resultX = hour + ":" + minute + ":" + second;
return resultX;
}
@Override
public int getDecimalDigits() {
return 0;
}
});