Установка положения оси x на y = 0 в гистограмме MPAndroid - PullRequest
0 голосов
/ 13 апреля 2019

Я уже некоторое время борюсь с этим, но я не могу найти способ, чтобы ось x с ее метками лежала в положении y = 0. Это важно, когда у меня есть и положительное, иотрицательные значения - я не хочу ставить ось с значениями по умолчанию, заданными AndroidMPChart (TOP, BOTTOM, BOTH_SIDED, TOP_INSIDE, BOTTOM_INSIDE), поскольку ни одно из них не применимо.

Мне удалось отредактировать xAxisRenderer,и смогли передать отношение моего значения maxY к моему значению minY, надеясь вручную найти положение для установки оси.Однако проблема в том, что мне нужна позиция самого высокого бара Y и самого низкого бара Y.Я не могу найти положение нижней панели Y без проблем, используя mViewPortHandler.contentBottom (), но использование mViewPortHandler.contentTop () по какой-то причине не дает мне верхнюю часть панели Y.

List<Float> floatList = new ArrayList<>();
floatList.add(0f);
floatList.add(mViewPortHandler.contentTop());
floatList.add(mViewPortHandler.offsetTop()+mViewPortHandler.getScaleY());
floatList.add(mViewPortHandler.getContentCenter().y);
floatList.add(mViewPortHandler.contentBottom());
floatList.add(mViewPortHandler.getChartHeight());

if (mDebug) {         
  for (int i=0; i<floatList.size(); i++) {                    
    Paint paint = new Paint(); 
    paint.setColor(getRandomColorInColorFormPrintString("i = " + i));
    paint.setStrokeWidth(3);
    c.drawLine(mViewPortHandler.contentLeft()+15*i,
    floatList.get(i), mViewPortHandler.contentRight()+15*i,  
    floatList.get(i), paint); 
  }        
}

Обратите внимание, что contentBottom (желтый) пригвоздит нижнюю часть панели, но верхняя часть содержимого и верхняя часть смещения (pink / red) не точны при поиске верхней части содержимого.Я пробовал это со многими различными значениями, contentBottom неизменно точен, тогда как contentTop / offsetTop не являются, и не смещены на высоту метки значения (я уже попробовал это также).enter image description here

Все, что мне действительно нужно, - это динамический способ установить положение оси x справа между положительными и отрицательными значениями.Я так удивлен, что эта опция не поставляется с Android MP Charts.Если да, пожалуйста, дайте мне знать, если я слишком усложняю вещи.Если это невозможно сделать с помощью Android MP Charts, пожалуйста, дайте мне знать, если вы знаете, что я делаю неправильно, пытаясь получить верхнюю часть шкалы Y.

1 Ответ

0 голосов
/ 16 апреля 2019

Вот так я решил проблему -

в функции renderAxisLine =>

MPPointD pos = mTrans.getPixelForValues(0f, 0f);
c.drawLine(mViewPortHandler.contentLeft(),
                (float)pos.y, mViewPortHandler.contentRight(),
                (float)pos.y, mAxisLinePaint);
...