как сделать эллипсовидную метку оси Y с помощью гистограммы с помощью achartengine

Я очень новичок в Android Developer, особенно для Graph. Теперь я создаю следующий график, используя библиотеку AchartEngine, но у меня есть следующая проблема:

В-1. Я хочу, чтобы метка левой стороны отображалась с фиксированной шириной, а оставшееся содержимое — с многоточием.

В-2 Когда я собираюсь изменить ориентацию с книжной на альбомную, график отображается, как на следующем втором изображении. Как установить лучший макет для графика?

В-3 Как установить 0 1 2 3...10 по оси X?

Я написал следующий код для этого графика:

createLayoutMethod():

/** Для создания макета графика **/

@SuppressWarnings("deprecation")
private void createGraphLayout() {
    // TODO Auto-generated method stub
    /** Initialixation for Graph */
    /** objext of dataset which is put on Graph*/
    dataset = new XYMultipleSeriesDataset();
    series = new CategorySeries("Number of Customer");


    renderer = new XYSeriesRenderer();
    //renderer.setColor(Color.rgb(0, 168, 240));

    mRenderer = new XYMultipleSeriesRenderer();

    /** Setting for Renderer **/
    mRenderer.setLabelsColor(Color.BLACK);
    mRenderer.setBackgroundColor(Color.WHITE);
    mRenderer.setOrientation(Orientation.VERTICAL);
    mRenderer.setClickEnabled(true);
    mRenderer.setLegendTextSize(15);
    mRenderer.setLabelsTextSize(13);
    mRenderer.setApplyBackgroundColor(true);
    mRenderer.setMargins(new int[] {10,10,200,10});

    mRenderer.setMarginsColor(Color.WHITE);
    mRenderer.setInScroll(true);

    mRenderer.setPanEnabled(true, false);
    mRenderer.setScale(1);
    mRenderer.setXLabelsAlign(Align.RIGHT);         // alignment of label x
    mRenderer.setXAxisMax(offer.length());
    mRenderer.setYLabelsAlign(Align.CENTER);        // alignment of label y
    mRenderer.setXLabelsColor(Color.BLACK);         // color of label x
    mRenderer.setYLabelsColor(0, Color.BLACK);      // color of label y

    mRenderer.setLegendHeight(60);
    mRenderer.setDisplayChartValues(true);

    mRenderer.setYAxisMax(offer.length());

    mRenderer.addSeriesRenderer(renderer);

}

putDataOnGraph(): для данных JSON, помещенных на график:

private void putDataOnGraph() {
        // TODO Auto-generated method stub
        try {

            for(int forOffer = 0; forOffer < offer.length(); forOffer++)
            {
                no_cust = 0;
                for(int forCust = 0; forCust < customer.length(); forCust++)
                {
                    if(offer.getJSONObject(forOffer).getInt("id") == customer.getJSONObject(forCust).getInt("offerId") && customer.getJSONObject(forCust).getInt("status") == 1)
                        no_cust = no_cust+1;
                }

                /** Check for x-axis maximum than customer **/
                maxX = no_cust > maxX ? no_cust : maxX;

                mRenderer.setXLabels(0);
                mRenderer.addXTextLabel(forOffer+1,offer.getJSONObject(forOffer).getString("offerTitle"));


                //Log.d("msg", ""+offer.getJSONObject(forOffer).getString("offerTitle") +" : "+no_cust);
                //Log.d("msg", ""+maxX);
                series.add(no_cust);
            }
            mRenderer.setYAxisMax(maxX);
            dataset.addSeries(series.toXYSeries());


        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Изображение графика (портрет): Изображение в профиль с гистограммой

Изображение графика (альбомная ориентация): Изображение горизонтальной ориентации с гистограммой

Ваша помощь будет оценена по достоинству.

Заранее спасибо....


person Pratik Butani    schedule 19.03.2013    source источник
comment
Я предлагаю вам писать более короткие вопросы вместо большого с большим количеством информации.   -  person Dan D.    schedule 19.03.2013
comment
Извините @Dan, но, пожалуйста, дайте какое-нибудь решение, если у вас есть...   -  person Pratik Butani    schedule 19.03.2013
comment
Привет, @Dan. Я использовал achartengine для Android, но он может не работать в Android 4.0.1. Есть ли какое-нибудь решение для этого.?   -  person Pratik Butani    schedule 19.03.2013
comment
У меня есть решения пунктуальных вопросов, а не огромных.   -  person Dan D.    schedule 23.03.2013
comment
AChartEngine работает с Android 4.x.   -  person Dan D.    schedule 23.03.2013
comment
Пожалуйста, ответьте мне на первый из приведенных выше вопросов ..   -  person Pratik Butani    schedule 26.03.2013


Ответы (2)


Для Q1 вам нужно будет вычислить ширину меток в пикселях и добавить ровно столько, сколько соответствует желаемой ширине. AChartEngine не сделает это за вас.

person Dan D.    schedule 26.03.2013

/** For creating lable, display 10 char if length is > 10 **/

// getting String from JSON
lable = offer.getJSONObject(forOffer).getString("offerTitle");

//if string length is grater than 10 then display only first 10 char
if(lable.length() > 10)
{
    lable = lable.substring(0, 9);
}

mRenderer.addXTextLabel(forOffer+1,lable);

Я отображал полный текст в Toast, когда пользователь нажимал на это

person Pratik Butani    schedule 26.03.2013
comment
Нет, Дэн, твой ответ лучший. хорошо. - person Pratik Butani; 26.03.2013
comment
@Дэн Пратик Бутани - честный человек, с которым он хотел бы подружиться - person UnderGround; 05.06.2013