Как изменить длину оси Y в образце библиотеки robinhood / spark? - PullRequest
0 голосов
/ 26 июня 2019

Библиотека GitHub

  1. По умолчанию диапазон оси Y находится в диапазоне 0-1, я хочу изменить его на 0-2000?
  2. Как показать значение оси X в макете при очистке?

Основная активность

 sparkView = findViewById(R.id.sparkview);

        adapter = new RandomizedAdapter();
        sparkView.setAdapter(adapter);
        sparkView.setScrubListener(new SparkView.OnScrubListener() {
            @Override
            public void onScrubbed(Object value) {
                if (value == null) {
                    scrubInfoTextView.setText(R.string.scrub_empty);
                } else {
                    scrubInfoTextView.setText(getString(R.string.scrub_format, value));
                }
            }
        });

SparkAdapter

  private final DataSetObservable observable = new DataSetObservable();

 
public abstract int getCount();
@NonNull
public abstract Object getItem(int index);

public float getX(int index) {
    return index;
}
public abstract float getY(int index);
@NonNull
public RectF getDataBounds() {
    final int count = getCount();
    final boolean hasBaseLine = hasBaseLine();

    float minY = hasBaseLine ? getBaseLine() : Float.MAX_VALUE;
    float maxY = hasBaseLine ? minY : -Float.MAX_VALUE;
    float minX = Float.MAX_VALUE;
    float maxX = -Float.MAX_VALUE;
    for (int i = 0; i < count; i++) {
        final float x = getX(i);
        minX = Math.min(minX, x);
        maxX = Math.max(maxX, x);

        final float y = getY(i);
        minY = Math.min(minY, y);
        maxY = Math.max(maxY, y);
    }
    // set values on the return object
    return createRectF(minX, minY, maxX, maxY);
}
@VisibleForTesting
RectF createRectF(float left, float top, float right, float bottom) {
    return new RectF(left, top, right, bottom);
}
public boolean hasBaseLine() {
    return false;
}
public float getBaseLine() {
    return 0;
}
public final void notifyDataSetChanged() {
    observable.notifyChanged();
}
public final void notifyDataSetInvalidated() {
    observable.notifyInvalidated();
}
public final void registerDataSetObserver(DataSetObserver observer) {
    observable.registerObserver(observer);
}
public final void unregisterDataSetObserver(DataSetObserver observer) {
    observable.unregisterObserver(observer);
}

Я хочу вывод, подобный этому Изображение , где при очистке отображаются обе оси Y и X.

1 Ответ

0 голосов
/ 26 июня 2019

1) Вы можете изменить значение Y, предоставленное SparkView, указав свой собственный подкласс SparkAdapter и возвращая любые значения, которые вы хотите из метода getY().SparkView автоматически масштабирует любые значения, предоставляемые вашим SparkAdapter, чтобы он соответствовал границам представления.

MySparkAdapter.java

public class MySparkAdapter extends SparkAdapter {

  // pass your real data into the constructor
  public MySparkAdapter(...) {
    // store your data
  }

  @Override
  public float getY() {
    // return the y value from your data
  }

  ... // other override methods
}

MainActivity.java

sparkView = findViewById(R.id.sparkview);
sparkView.setAdapter(new MySparkAdapter(...));

2)new SparkView.OnScrubListener() будет получать вызов на onScrubbed() каждый раз, когда изменяется значение очистки.Все, что вам нужно сделать, это взять Object (это тот же объект, который ваш MySparkAdapter возвращает из getObject()) и использовать его для обновления вашего пользовательского интерфейса.

Надеюсь, это поможет!

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