AndroidPlot: как я могу изменить данные домена? - PullRequest
4 голосов
/ 22 июля 2011

Я на самом деле использую библиотеку AndroidPlot, чтобы использовать простую диаграмму в своем проекте Android, но я не знаю, как я могу изменить значения доменной зоны.

Более конкретно, эта строка:

mySimpleXYPlot.setDomainValueFormat(new DecimalFormat("#"));

На веб-сайте сказано, что я могу использовать другие форматы и это правда, но если я использую, например:

SimpleDateFormat("dd-MM-yyyy")

На графике "31-12-1969" во всех значениях домена.

Кто-нибудь знает, как я могу изменить эту дату?или использовать другой формат (например, String)?

1 Ответ

4 голосов
/ 03 февраля 2012

Поздний ответ, но, возможно, будет полезен другим людям.

У меня тоже были проблемы с этой проблемой, тем более что я новичок в Java. Я реализовал пользовательский форматер. Кажется немного уродливым решением, но оно работает. Идея заключается в следующем:

  • взять только ось Y для значений и оставить ось X в качестве индексов в массиве (как подсказывает учебник по Androidplot, использование ArrayFormat.Y_VALS_ONLY, // Y_VALS_ONLY означает использование индекса элемента в качестве значения x)
  • каждый раз, когда ваши данные изменяются, вам нужно передать на график новый форматер с новыми данными для оси X

Вот некоторые фрагменты кода.

Первый - это класс, который преобразует индекс массива в пользовательскую метку. Строка:

public class MyIndexFormat extends Format {

    public String[] Labels = null;

        @Override
        public StringBuffer format(Object obj, 
                StringBuffer toAppendTo, 
                FieldPosition pos) {

            // try turning value to index because it comes from indexes
            // but if is too far from index, ignore it - it is a tick between indexes
            float fl = ((Number)obj).floatValue();
            int index = Math.round(fl);
            if(Labels == null || Labels.length <= index ||
                    Math.abs(fl - index) > 0.1)
                return new StringBuffer("");    

            return new StringBuffer(Labels[index]); 
        }

А вот как я прикрепляю его к сюжету:

MyIndexFormat mif = new MyIndexFormat ();
mif.Labels = // TODO: fill the array with your custom labels

// attach index->string formatter to the plot instance
pricesPlot.getGraphWidget().setDomainValueFormat(mif); 

Этот прием также работает для динамических обновлений.

ВНИМАНИЕ: на Androidplot, похоже, возникают проблемы с рисованием горизонтальных линий, поэтому, если ваши данные имеют одинаковые значения Y, вы можете получить странные результаты, я уже обратился за помощью по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...