Библиотека Graphview неправильно отображает ось Y с округлением, установленным для человека, равным false

Я использую библиотеку GraphView из github, просто названную Graphview.

У меня есть даты по оси x и вес в кг по оси y. График построен фрагментарно. Вы можете добавить новые графики в графическое представление, введя имя графика в текстовом представлении автозаполнения:

   DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getActivity());
   DateAsXAxisLabelFormatter dateAsXAxisLabelFormatter = new 
   DateAsXAxisLabelFormatter(getActivity(), DateFormat.getDateInstance());
   graphView.getGridLabelRenderer().setLabelFormatter(dateAsXAxisLabelFormatter);
   graphView.getGridLabelRenderer().setNumHorizontalLabels(3);// only 4 because of the space
   graphView.getGridLabelRenderer().setHumanRounding(false);
   graphView.getViewport().setXAxisBoundsManual(true);
   graphView.getViewport().setYAxisBoundsManual(false);

   String[] names= getNames();
   ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), 
   android.R.layout.simple_dropdown_item_1line, names);
   addGraphValue.setAdapter(adapter);

   addGraphValue.setOnEditorActionListener(new TextView.OnEditorActionListener() {
       @Override
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
           if (actionId == EditorInfo.IME_ACTION_SEARCH){
               addToGraph(addGraphValue.getText().toString());
           }
           return true;
       }
   }); 

addToGraph выполняет функцию, в которой значение y находится на основе некоторых критериев, касающихся текста в autoCompleteTextview addGraphValue. Когда это значение найдено, оно добавляется в lineGraphSeries вместе с соответствующей датой. После того, как это произошло столько раз, сколько нужно, на график добавляется ряд:

          for(/*not important*/){
               //Finding the y-value
               dataPoint = new DataPoint(date, y);
               mLineGraphSeries.appendData(dataPoint, false, 100);
           }

           mLineGraphSeries.setColor(mColors[position]);
           graphView.addSeries(mLineGraphSeries);
           mLineGraphSeries.setDrawDataPoints(true);

Итак, вот проблема: когда добавляется первое значение, ось Y сходит с ума и добавляет много значений: Картина происходящего

Теперь, если я включу округление вручную, значения y будут фиксированными, но даты будут отображаться странно: Picture из этого

Если я перезагружу страницу (сохраню линейку графиков, перезагружу фрагмент и снова добавлю его), проблема исчезнет. Жизни не могу понять в чем дело, помогите пожалуйста.


person Jbot    schedule 16.06.2017    source источник


Ответы (1)


Вы должны переопределить GraphView и первое, что вы делаете, вы вызываете init(); Также в XML вам нужно перейти с com.jjoe64.graphview.GraphView на то, где находится ваш класс (например: com.myName.android.myapplication.app.CustomGraphView

Это должно решить вашу проблему

public class CustomGraphView extends GraphView {
public CustomGraphView(Context context) {
super(context);
}
public CustomGraphView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomGraphView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);    
}
public void init() {
super.init();
// set the custom style
}
}
person gigi2peu    schedule 12.06.2018