您当前的位置: 首页 >  ar

代码与思维

暂无认证

  • 0浏览

    0关注

    163博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MPAndroidChart 运动数据图表自定义

代码与思维 发布时间:2022-09-01 21:34:49 ,浏览量:0

声明:文中的MPChart代指MPAndroidChart.

本系列之前的文章介绍的MPChart中BarChart相关的一些绘制,接下来我们看看LineChart相关的绘制。这里以实际的运动相关的图表数据做业务支撑来讲解。MPChart图表支持多指触控方法,这里所有的图表自定义都关掉了这个属性,这样就减少Transformer,以及绘制过程中的更多的变动,相当于一个静态的图。通常图表在放大的过程中,坐标轴也会随之展现更小的刻度,复杂度就变高了,具体的显示的刻度就可能出现小数之类的等情况。

这里我们关掉触摸放大后,相当于一个静态的图。这时候,产品以及设计可能需要我们的X轴坐标、Y轴坐标等刻度尽可能地为整数,这样看起来比较美观。静态的情况下,因为没法移动,即便可以移动,首次展现也希望图表的数据能够比较居中,这就涉及到YAxis的自定义如何影响控制 Chart的相关展示逻辑的内容,本章节首先从这入手,讲解运动数据图表的绘制。

  • TimeAxis

这里自定义X轴TimeAxis,实际意义是一次运动耗费的时间,继承自XAxis。假如一次运动1个小时06分钟,设计希望展示4个刻度(0, 20 , 40, 60 分钟), 这时需要我们自己去控制,假如不加控制的话,Default情况下没法准确的实现设计的需求。

XAxis、YAxis有两个属性,Maximum, Minmum. 这样设定每个interval 就可以计算出要显示的刻度列表, labelList, 加入到XAxis中的 mEntries, 最后在XAxisRender会拿到mEntries 最终绘制 X坐标。

这里不在设计一个算法类计算每个时间段的刻度显示了,运动的时间范围有限,直接枚举, 在 TimeXAxis里的getlabelCount() 实现。

  if (max > 6000 * TimeDateUtil.TIME_MIN_INT){
    interval = 2000 * TimeDateUtil.TIME_MIN_INT;
  } else if (max > 4800 * TimeDateUtil.TIME_MIN_INT) {// 80个小时
    interval = 1920 * TimeDateUtil.TIME_MIN_INT;
  } else if (max > 2400 * TimeDateUtil.TIME_MIN_INT) {// 40个小时
    interval = 960 * TimeDateUtil.TIME_MIN_INT;
  } else if (max > 1200 * TimeDateUtil.TIME_MIN_INT) {
    interval = 480 * TimeDateUtil.TIME_MIN_INT;
  }
  。。。。。
  else if (max > 20 * TimeDateUtil.TIME_MIN_INT) {
    interval = 5 * TimeDateUtil.TIME_MIN_INT;
  } else if (max > 15 * TimeDateUtil.TIME_MIN_INT) {
    interval = 4 * TimeDateUtil.TIME_MIN_INT;//4分钟刻度
  } else if (max > 5 * TimeDateUtil.TIME_MIN_INT) {//
    interval = 2 * TimeDateUtil.TIME_MIN_INT;//2分钟刻度。
  } else {
    interval = TimeDateUtil.TIME_MIN_INT;
  }
  float currentEntry = min;
  List entryList = new ArrayList();
  do {
    entryList.add(currentEntry);
    currentEntry += interval;
  } while (currentEntry  5) {// 配速中 有 配速值很慢的点,坐标时不考虑它们了。
      yAxisMax = averageY + 2 * distanceMin; // 限制Y 轴坐标。
    }
    float distance = yAxisMax - yAxisMin;
    if (yAxisMax > 0 && distance             
关注
打赏
1665387627
查看更多评论
0.0522s