10

GraphViewライブラリを使用しています(https://github.com/jjoe64/GraphViewまたはhttp://www.jjoe64.com/p/graphview-library.htmlを参照)

ただし、X-asには日付/時刻を使用したいと思います。誰かがこれを達成する簡単な方法を知っていますか、または誰かが私を正しい方向に押し進めることができますか?

4

4 に答える 4

13

これはこれを行う正しい方法です

x値としてunixタイムスタンプ(1.01.1970からの秒数)を使用する必要があります。

次に、カスタムラベルフォーマッターを設定し、UNIXタイムスタンプを文字列に変換できます。

final java.text.DateFormat dateTimeFormatter = DateFormat.getTimeFormat(mActivity);

LineGraphView graphView = new LineGraphView(mActivity, entry.getValue()) {
    @Override
    protected String formatLabel(double value, boolean isValueX) {
        if (isValueX) {
            // transform number to time
            return dateTimeFormatter.format(new Date((long) value*1000));
        } else {
            return super.formatLabel(value, isValueX);
        }
    }
};
于 2012-09-17T08:41:39.647 に答える
2

GraphViewは使用するのに最適なライブラリであり、私もそれが最も簡単だと思います。これを行うための最初のステップは、GraphView.java内のGraphViewDataクラスに文字列変数を追加することです。そのようです:

static public class GraphViewData {
    public final double valueX;
    public final double valueY;
    public final String valueDate;

    public GraphViewData(double valueX, double valueY,String valueDate) {
        super();
        this.valueX = valueX;
        this.valueY = valueY;
        this.valueDate = valueDate;
    }
}

GraphView Graphを作成するときにGraphViewDataオブジェクトを作成するときは、日付データを文字列形式で(XおよびYとともに)追加する必要があります。

グラフに80個のデータポイントがあるとします(インデックス0〜79)。GraphView内に、水平ラベルの生成と返送を担当するメソッドがあります。これは、generateHorLabelsと呼ばれると思います。X値(0〜79)を返すだけでなく、X値を使用してGraphDataオブジェクトから文字列を取得します。

現在のコードでは、 forループに次のコードが含まれている必要があります

labels[i] = formatLabel(min + ((max-min)*i/numLabels), true);

上記の代わりに、このようなことを行うことができます。

Double temp =  Double.valueOf(formatLabel(min + ((max-min)*i/numLabels), true));
int rounded =(int)Math.round(temp); 
labels[i] = values[rounded].valueDate;

これがお役に立てば幸いです。

于 2012-05-16T21:06:52.823 に答える
1

これがjjoe64からの更新された回答で、Date#getTime()から取得したx値を使用しています。

    final DateFormat dateTimeFormatter = DateFormat.getDateTimeInstance();        
    graphView = new LineGraphView(context, "Chart");
    graphView.setCustomLabelFormatter(new CustomLabelFormatter() 
    {
        @Override
        public String formatLabel(double value, boolean isValueX) 
        {
            if (isValueX)
            {
                return dateTimeFormatter.format(new Date((long) value));
            }
            return null; // let graphview generate Y-axis label for us
        }
    });
于 2014-05-23T05:31:10.887 に答える
0

値を設定すると同時に、水平ラベルを作成しました。

public void initializeLineGraphView() {

    // Get last weeks entries from the DB
    ArrayList<Entry> entries = DbManager.getInstance().getLastWeeksEntries(new Date());
    String[] hLabels = new String[entries.size()];
    GraphView.GraphViewData[] graphViewData = new GraphView.GraphViewData[entries.size()];

    for(int i = 0; i < entries.size(); i++) {

        Entry entry = entries.get(i);
        int pain = entry.getPain();
        graphViewData[i] = new GraphView.GraphViewData(i, pain);

        // Generate the horizontal labels
        SimpleDateFormat sdf = new SimpleDateFormat("EEE");
        String dayOfWeek = sdf.format(entry.getDate());
        hLabels[i] = dayOfWeek;

    }

    mSeries = new GraphViewSeries("", null, graphViewData);
    GraphView graphView = new LineGraphView(getActivity(), "");
    graphView.addSeries(mSeries);
    graphView.setHorizontalLabels(hLabels);
    graphView.setVerticalLabels(new String[] {"10", "5", "0"});
    mLineGraphView = graphView;

}
于 2014-05-28T13:43:35.610 に答える