Как установить фиксированные горизонтальные метки на оси X в графическом представлении (Android Studio)

Я использую библиотеку GraphView и хочу отображать месяцы года по оси X. моя проблема в том, что метки перекрываются в "портретном" режиме. он выглядит лучше в «ландшафтном» режиме, хотя метки также перекрываются.

вот как мой график выглядит в «портретном» режиме:

введите здесь описание изображения

вот как мой график выглядит в «пейзажном» режиме (намного лучше):

введите здесь описание изображения

Когда я пытаюсь сделать более короткие метки (январь, февраль, март, апрель и т. д.) или меньший размер шрифта, становится только хуже (похоже, создается больше вертикальных линий):

введите здесь описание изображения

Это мой код:

   GraphView graph_LastYear = (GraphView) findViewById(R.id.graph_yearly);
    GraphView graph_Last3Months = (GraphView) findViewById(R.id.graph_last3month);

    LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(new DataPoint[]{

            new DataPoint(1, Sallries_WholeYear.get(0).getNetoPayment()),
            new DataPoint(2, Sallries_WholeYear.get(1).getNetoPayment()),
            new DataPoint(3, Sallries_WholeYear.get(2).getNetoPayment()),
            new DataPoint(4, Sallries_WholeYear.get(3).getNetoPayment()),
            new DataPoint(5, Sallries_WholeYear.get(4).getNetoPayment()),
            new DataPoint(6, Sallries_WholeYear.get(5).getNetoPayment()),
            new DataPoint(7, Sallries_WholeYear.get(6).getNetoPayment()),
            new DataPoint(8, Sallries_WholeYear.get(7).getNetoPayment()),
            new DataPoint(9, Sallries_WholeYear.get(8).getNetoPayment()),
            new DataPoint(10, Sallries_WholeYear.get(9).getNetoPayment()),
            new DataPoint(11, Sallries_WholeYear.get(10).getNetoPayment()),
            new DataPoint(12, Sallries_WholeYear.get(11).getNetoPayment())
    }
    );



    series.setDrawDataPoints(true);
    series.setColor(Color.BLACK);
    series.setDrawDataPoints(true);
    series.setDataPointsRadius(10);
    series.setThickness(8);

    graph_LastYear.addSeries(series);
    graph_LastYear.setTitle("Last Year");
    graph_LastYear.setTitleTextSize(60);

    graph_LastYear.getViewport().setScalable(true);
    graph_LastYear.getViewport().setScrollable(true);



    graph_LastYear.getGridLabelRenderer().setTextSize(40);
    graph_LastYear.getGridLabelRenderer().setNumHorizontalLabels(12);
    graph_LastYear.getGridLabelRenderer().setGridColor(Color.BLUE);


    StaticLabelsFormatter staticLabelsFormatter = new StaticLabelsFormatter(graph_LastYear);
    staticLabelsFormatter.setHorizontalLabels(new String[]{getString(R.string.Janury_Month), getString(R.string.February_Month), getString(R.string.March_Month), getString(R.string.April_Month), getString(R.string.My_Month), getString(R.string.June_Month), getString(R.string.July_Month), getString(R.string.August_Month),
            getString(R.string.September_Month), getString(R.string.October_Month), getString(R.string.November_Month), getString(R.string.December_Month)});
    graph_LastYear.getGridLabelRenderer().setLabelFormatter(staticLabelsFormatter);

Спасибо за помощь !


person liav bahar    schedule 21.09.2016    source источник


Ответы (1)


Вы можете повернуть этикетки вертикально, используя:

GridLabelRenderer renderer = graphView.getGridLabelRenderer();
renderer.setHorizontalLabelsAngle(90);

Или сделайте несколько меток невидимыми, если значения оси x слишком велики, используя следующие

GridLabelRenderer gridLabel = graphView.getGridLabelRenderer();
gridLabel.setLabelFormatter(new DefaultLabelFormatter(){
            @Override
            public String formatLabel(double value, boolean isValueX) {
                if (isValueX) {
                    // return as Integer
                    if (value % Commons.getDivisier(finalCategoryArray.length) == 0){
                        return ""+ finalCategoryArray[((int) value)];
                    }else {
                        return null;
                    }

                } else {
                    // show currency for y values
                    return super.formatLabel(value, isValueX);
                }
            }
        });

public static double getDivisier(int length) {
        if (length < 5){
                return 1;
        }else if (length < 10){
            return 2;
        }else if (length < 50){
            return 5;
        }else if (length < 100){
            return 10;
        }
        return 1;
    }
person vivek agarwal    schedule 27.02.2017