android - 如何在 Android AChartEngine 中创建字符串标签?

标签 android achartengine

class GraphInitializer extends AbstractDemoChart
    {
        public Intent execute(Context context) 
        {
            String[] titles = new String[] { "" }; 
            dates.add(dateList);
            values.add(glucoseAvgDaily);
            String ndates[] = new String[]{"Sun","Mon","Teu","Wed","Thurs","Fri","Sat"};
            int[] colors = new int[] { Color.GREEN };
            PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE };
            XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
            setChartSettings(renderer, "", "", "", dateList[0].getTime(),
                    dateList[dateList.length - 1].getTime(), getMinReadingValue(readingList), getMaxReadingValue(readingList), Color.WHITE, Color.LTGRAY);
            int max = (int)getMaxReadingValue(readingList);
            max += 100;
            renderer.setYLabels(5);
            renderer.setZoomLimits(new double[]{dateList[0].getTime(), dateList[dateList.length - 1].getTime(),   -10, max });
            renderer.setZoomEnabled(true, true);
            renderer.setZoomButtonsVisible(false);
            return ChartFactory.getLineChartIntent(context, buildDateDataset(titles, ndates, values),
                    renderer);
        }

这是我的 AbstractDemoChart:

package com.db.Graphs;

/**
 * Copyright (C) 2009, 2010 SC 4ViewSoft SRL
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.achartengine.chart.PointStyle;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.MultipleCategorySeries;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.graphics.Paint.Align;
import android.util.Log;

/**
 * An abstract class for the demo charts to extend. It contains some methods for
 * building datasets and renderers.
 */
public abstract class AbstractDemoChart implements IDemoChart {
    /**
     * Builds an XY multiple dataset using the provided values.
     * 
     * @param titles
     *            the series titles
     * @param xValues
     *            the values for the X axis
     * @param yValues
     *            the values for the Y axis
     * @return the XY multiple dataset
     */
    protected XYMultipleSeriesDataset buildDataset(String[] titles,
            List<double[]> xValues, List<double[]> yValues) {
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        addXYSeries(dataset, titles, xValues, yValues, 0);

        return dataset;
    }

    public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles,
            List<double[]> xValues, List<double[]> yValues, int scale) {
        int length = titles.length;
        for (int i = 0; i < length; i++) {
            XYSeries series = new XYSeries(titles[i], scale);
            double[] xV = xValues.get(i);
            double[] yV = yValues.get(i);
            int seriesLength = xV.length;
            System.out.println("X = "+seriesLength);
            seriesLength = yV.length;
            System.out.println("y = "+seriesLength);
            for (int k = 0; k < seriesLength; k++) {
                series.add(xV[k], yV[k]);
            }
            dataset.addSeries(series);
        }
    } 

    /** 
     * Builds an XY multiple series renderer.
     * 
     * @param colors
     *            the series rendering colors
     * @param styles
     *            the series point styles
     * @return the XY multiple series renderers
     */
    protected XYMultipleSeriesRenderer buildRenderer(int[] colors,
            PointStyle[] styles) {
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        setRenderer(renderer, colors, styles);
        return renderer;
    }

    protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors,
            PointStyle[] styles) {
        renderer.setAxisTitleTextSize(16);
        renderer.setChartTitleTextSize(20);
        renderer.setLabelsTextSize(15);
        renderer.setLegendTextSize(15);
        renderer.setPointSize(5f);
        renderer.setMargins(new int[] { 20, 30, 15, 20 });
        int length = colors.length;
        for (int i = 0; i < length; i++) {
            XYSeriesRenderer r = new XYSeriesRenderer();
            r.setColor(colors[i]);
            r.setPointStyle(styles[i]);
            r.setFillPoints(true);
            r.setLineWidth(2);
            r.setChartValuesTextSize(6);
            r.setChartValuesTextAlign(Align.CENTER);
            r.setChartValuesTextSize(10);
            renderer.addSeriesRenderer(r);

        }
    }

    /**
     * Sets a few of the series renderer settings.
     * 
     * @param renderer
     *            the renderer to set the properties to
     * @param title
     *            the chart title
     * @param xTitle
     *            the title for the X axis
     * @param yTitle
     *            the title for the Y axis
     * @param xMin
     *            the minimum value on the X axis
     * @param xMax
     *            the maximum value on the X axis
     * @param yMin
     *            the minimum value on the Y axis
     * @param yMax
     *            the maximum value on the Y axis
     * @param axesColor
     *            the axes color
     * @param labelsColor
     *            the labels color
     */
    protected void setChartSettings(XYMultipleSeriesRenderer renderer,
            String title, String xTitle, String yTitle, double xMin,
            double xMax, double yMin, double yMax, int axesColor,
            int labelsColor) {
        renderer.setChartTitle(title);
        renderer.setXTitle(xTitle);
        renderer.setYTitle(yTitle);
        renderer.setXAxisMin(xMin);
        renderer.setXAxisMax(xMax);
        renderer.setYAxisMin(yMin);
        renderer.setYAxisMax(yMax);
        renderer.setAxesColor(axesColor);
        renderer.setLabelsColor(labelsColor);

    }

    /**
     * Builds an XY multiple time dataset using the provided values.
     * 
     * @param titles
     *            the series titles
     * @param xValues
     *            the values for the X axis
     * @param yValues
     *            the values for the Y axis
     * @return the XY multiple time dataset
     */
    protected XYMultipleSeriesDataset buildDateDataset(String[] titles,
            List<Date[]> xValues, List<double []> yValues) {
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");

        int length = titles.length;
        for (int i = 0; i < length; i++) {
            TimeSeries series = new TimeSeries(titles[i]);
            Date[] xV = xValues.get(i);
            double[] yV = yValues.get(i);
            int seriesLength = xV.length;

            for (int k = 0; k<seriesLength; k++) {
                 //formattedDate = formatter.format(todaysDate);
                System.out.println("DATE = "+xV[k]+" GRAPHDATA "+yV[k]);//+new Double(yV[k]).doubleValue());
                series.add(xV[k], yV[k]);
            }
            dataset.addSeries(series);
        }
        return dataset;
    }
    protected XYMultipleSeriesDataset buildDateDataset(String[] titles,
            String[] ndates, List<double []> yValues) {
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();


        int length = titles.length;
        for (int i = 0; i < length; i++) {
            TimeSeries series = new TimeSeries(titles[i]);

            double[] yV = yValues.get(i);
            int seriesLength = ndates.length;

            for (int k = 0; k<seriesLength; k++) {
                 //formattedDate = formatter.format(todaysDate);

                series.addString(k, yV[k]);
            }
            dataset.addSeries(series);
        }
        return dataset;  
    }


    /**
     * Builds a category series using the provided values.
     * 
     * @param titles
     *            the series titles
     * @param values
     *            the values
     * @return the category series
     */
    protected CategorySeries buildCategoryDataset(String title, double[] values) {
        CategorySeries series = new CategorySeries(title);
        int k = 0;
        for (double value : values) {
            series.add("Project " + ++k, value);
        }

        return series;
    }

    /**
     * Builds a multiple category series using the provided values.
     * 
     * @param titles
     *            the series titles
     * @param values
     *            the values
     * @return the category series
     */
    protected MultipleCategorySeries buildMultipleCategoryDataset(String title,
            List<String[]> titles, List<double[]> values) {
        MultipleCategorySeries series = new MultipleCategorySeries(title);
        int k = 0;
        for (double[] value : values) {
            series.add(2007 + k + "", titles.get(k), value);
            k++;
        }
        return series;
    }

    /**
     * Builds a category renderer to use the provided colors.
     * 
     * @param colors
     *            the colors
     * @return the category renderer
     */
    protected DefaultRenderer buildCategoryRenderer(int[] colors) {
        DefaultRenderer renderer = new DefaultRenderer();
        renderer.setLabelsTextSize(15);
        renderer.setLegendTextSize(15);
        renderer.setMargins(new int[] { 20, 30, 15, 0 });
        for (int color : colors) {
            SimpleSeriesRenderer r = new SimpleSeriesRenderer();
            r.setColor(color);
            renderer.addSeriesRenderer(r);
        }
        return renderer;
    }

    /**
     * Builds a bar multiple series dataset using the provided values.
     * 
     * @param titles
     *            the series titles
     * @param values
     *            the values
     * @return the XY multiple bar dataset
     */
    protected XYMultipleSeriesDataset buildBarDataset(String[] titles,
            List<double[]> values) {
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        int length = titles.length;
        for (int i = 0; i < length; i++) {
            CategorySeries series = new CategorySeries(titles[i]);
            double[] v = values.get(i);
            int seriesLength = v.length;
            for (int k = 0; k < seriesLength; k++) {
                series.add(v[k]);
            }
            dataset.addSeries(series.toXYSeries());
        }
        return dataset;
    }

    /**
     * Builds a bar multiple series renderer to use the provided colors.
     * 
     * @param colors
     *            the series renderers colors
     * @return the bar multiple series renderer
     */
    protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        renderer.setAxisTitleTextSize(16);
        renderer.setChartTitleTextSize(20);
        renderer.setLabelsTextSize(15);
        renderer.setLegendTextSize(15);
        int length = colors.length;
        for (int i = 0; i < length; i++) {
            SimpleSeriesRenderer r = new SimpleSeriesRenderer();
            r.setColor(colors[i]);
            renderer.addSeriesRenderer(r);
        }
        return renderer;
    }

}

目前,我可以绘制时间,但无法绘制工作日标签。

因此,假设 X 轴的星期日将在 Y 轴上绘制一个数字。

我该怎么做?

最佳答案

要添加自定义文本标签,您可以:

renderer.addXTextLabel(x, "label");
renderer.addYTextLabel(y, "label");

关于android - 如何在 Android AChartEngine 中创建字符串标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21607561/

相关文章:

java - 用 Joda-time 进行时间计算?

java - 如何在 achartengine 中创建动态数组列表

android - 使用 Achartengine 的堆积条形图

android - 如何使用 achartengine 设置条形宽度。我的最后一个酒吧被挤掉了

java - Android Studio 1.3 : 'Class ref in pre-verified class resolved to unexpected implementation' error

android - 当用户单击上下文菜单中的禁用项时调用哪个事件?

android - 将 Kinect 连接到安卓

android - 如何在首选项中列出 GNU C

android - 使用 AChartEngine 混淆器

android - aChartEngine 处理大数据时真的很慢