1. <i id='AdpRs'><tr id='AdpRs'><dt id='AdpRs'><q id='AdpRs'><span id='AdpRs'><b id='AdpRs'><form id='AdpRs'><ins id='AdpRs'></ins><ul id='AdpRs'></ul><sub id='AdpRs'></sub></form><legend id='AdpRs'></legend><bdo id='AdpRs'><pre id='AdpRs'><center id='AdpRs'></center></pre></bdo></b><th id='AdpRs'></th></span></q></dt></tr></i><div id='AdpRs'><tfoot id='AdpRs'></tfoot><dl id='AdpRs'><fieldset id='AdpRs'></fieldset></dl></div>

      <small id='AdpRs'></small><noframes id='AdpRs'>

      <tfoot id='AdpRs'></tfoot>

        <bdo id='AdpRs'></bdo><ul id='AdpRs'></ul>
      <legend id='AdpRs'><style id='AdpRs'><dir id='AdpRs'><q id='AdpRs'></q></dir></style></legend>

        MPAndroidChart x 轴日期/时间标签格式

        时间:2023-08-31
        <legend id='k6WqV'><style id='k6WqV'><dir id='k6WqV'><q id='k6WqV'></q></dir></style></legend>
        • <small id='k6WqV'></small><noframes id='k6WqV'>

          <i id='k6WqV'><tr id='k6WqV'><dt id='k6WqV'><q id='k6WqV'><span id='k6WqV'><b id='k6WqV'><form id='k6WqV'><ins id='k6WqV'></ins><ul id='k6WqV'></ul><sub id='k6WqV'></sub></form><legend id='k6WqV'></legend><bdo id='k6WqV'><pre id='k6WqV'><center id='k6WqV'></center></pre></bdo></b><th id='k6WqV'></th></span></q></dt></tr></i><div id='k6WqV'><tfoot id='k6WqV'></tfoot><dl id='k6WqV'><fieldset id='k6WqV'></fieldset></dl></div>
            <tfoot id='k6WqV'></tfoot>

                  <tbody id='k6WqV'></tbody>

                  <bdo id='k6WqV'></bdo><ul id='k6WqV'></ul>
                  本文介绍了MPAndroidChart x 轴日期/时间标签格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  背景

                  对于我应用中的一些图表,我使用的是 MPAndroidChart 库.我的图表的所有水平轴都是基于时间的,它们可以跨越一整年、一个月、一周、一天或一个小时.它总是显示一个完整的时间段,例如 1 月至 12 月、周一至周日、0:00 - 24:00 等.轴的值始终是纪元时间戳(以秒为单位).

                  For some charts in my app, I'm using the MPAndroidChart library. All horizontal axis' of my graphs are time based, they can span a full year, a month, a week, a day or span one hour. It always shows a full period, so January-December, Monday-Sunday, 0:00 - 24:00 etc. The value of the axis is always the epoch-timestamp (in seconds).

                  要求

                  我希望 x 轴标签遵循以下规则:

                  I want the x-axis labels to follow these rules:

                  • 月 1 日(如果是 跨度);
                  • 一天的开始,如果是跨度;
                  • 在任何整小时 (##:00)(并非全部),如果是跨度;
                  • 小时跨度的任何5分钟点上.
                  • at 1st of month in case of year span;
                  • at start of day in case of month or week span;
                  • on any full hour (##:00) (not perse all) in case of a day span;
                  • on any 5 minute point on an hour span.

                  问题

                  我可以设置 x 轴的 granularity,这样可以确保两点之间的空间不小于粒度所说的,但这可能意味着(在一天跨度的情况下)第一个标签是凌晨 1:00,第二个是凌晨 2:01,第三个是凌晨 3:16,因为这符合(最小)60 分钟的粒度.

                  I can set the granularity of the x-axis, which makes sure there is no less space between two points then the granularity says, but that can mean that (in case of day span) the first label is at 1:00am, and the second at 2:01am and the third is at 3:16am, since that fits a granularity of (minimum) 60 minutes.

                  当前不正确的情况,最好是 [0:00, 3:00, 6:00, 9:00 ..]

                  Current incorrect situation, which would ideally be something like [0:00, 3:00, 6:00, 9:00 ..]

                  问题

                  有没有办法控制x轴标签的定位来达到上面的效果?

                  Is there a way to control the positioning of the x-axis labels to achieve the results above?

                  推荐答案

                  我也做过,试试这个,

                   XAxis xAxis = mChart.getXAxis();
                      xAxis.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE);
                      xAxis.setDrawGridLines(false);
                      xAxis.setGranularity(1f); // only intervals of 1 day
                      xAxis.setTypeface(mTfLight);
                      xAxis.setTextSize(8);
                      xAxis.setTextColor(ContextCompat.getColor(this, R.color.colorYellow));
                      xAxis.setValueFormatter(new GraphXAxisValueFormatter(range, interval, slot));
                  

                  在你的情况下,在这个 range 中.如果你想要一个月,那么有 12 个,如果是第 7 周等等.

                  in this range in your case. If you want month then there is 12, in case of week 7 etc.

                  interval 中你通过了 1.

                  in interval you pass 1.

                  slot 你必须通过,识别你的数据,比如月、年、日,我为此使用了枚举.

                  in slot you have to pass, identification of your data like month, year, day, i have use enum for this.

                  public class GraphXAxisValueFormatter implements IAxisValueFormatter {
                  
                  private static int MINUTES_INTERVAL = 5;
                  private String[] mValues;
                  private int mInterval;
                  private SensorInterval.Interval mSlot;
                  
                  public GraphXAxisValueFormatter(List<BinSensorData> range, int interval, SensorInterval.Interval slot) {
                      mValues = new String[range.size()];
                      mInterval = interval;
                      mSlot = slot;
                  
                      Calendar calendar = Calendar.getInstance();
                      for (int i = 0; i < range.size(); i++) {
                          calendar.setTimeInMillis(range.get(i).getTime());
                  
                          int unroundedMinutes = calendar.get(Calendar.MINUTE);
                          int mod = unroundedMinutes % MINUTES_INTERVAL;
                          calendar.add(Calendar.MINUTE, mod < 8 ? -mod : (MINUTES_INTERVAL - mod));
                  
                  
                          String s = "";
                  
                          if (slot.equals(SensorInterval.Interval.HOUR) || slot.equals(SensorInterval.Interval.DAY))
                              s = Util.getTimeFromTimestamp(calendar.getTimeInMillis());
                          else if (slot.equals(SensorInterval.Interval.WEEK))
                              s = Util.getDayFromTimestamp(calendar.getTimeInMillis());
                          else if (slot.equals(SensorInterval.Interval.MONTH))
                              s = Util.getMonthFromTimestamp(calendar.getTimeInMillis());
                          else if (slot.equals(SensorInterval.Interval.YEAR))
                              s = Util.getYearFromTimestamp(calendar.getTimeInMillis());
                  
                  
                          Util.setLog("Time : "+s);
                          mValues[i] = s;
                      }
                  }
                  
                  @Override
                  public String getFormattedValue(float value, AxisBase axis) {
                      Util.setLog("Value : "+ value);
                      if (value % mInterval == 0 && value >= 0) {
                          return mValues[(int) value % mValues.length];
                      } else
                          return "";
                  
                  }
                  
                  @Override
                  public int getDecimalDigits() {
                      return 0;
                  }
                  

                  参见:http://prntscr.com/dbn62x

                  这篇关于MPAndroidChart x 轴日期/时间标签格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何在Android中打印带有两位小数的双精度数? 下一篇:如何在 Android 中获取用户选择的日期格式?

                  相关文章

                  最新文章

                    <bdo id='oNKdt'></bdo><ul id='oNKdt'></ul>

                • <tfoot id='oNKdt'></tfoot>

                  <i id='oNKdt'><tr id='oNKdt'><dt id='oNKdt'><q id='oNKdt'><span id='oNKdt'><b id='oNKdt'><form id='oNKdt'><ins id='oNKdt'></ins><ul id='oNKdt'></ul><sub id='oNKdt'></sub></form><legend id='oNKdt'></legend><bdo id='oNKdt'><pre id='oNKdt'><center id='oNKdt'></center></pre></bdo></b><th id='oNKdt'></th></span></q></dt></tr></i><div id='oNKdt'><tfoot id='oNKdt'></tfoot><dl id='oNKdt'><fieldset id='oNKdt'></fieldset></dl></div>
                • <small id='oNKdt'></small><noframes id='oNKdt'>

                    1. <legend id='oNKdt'><style id='oNKdt'><dir id='oNKdt'><q id='oNKdt'></q></dir></style></legend>