2013-03-06 98 views
6

我工作在Android上的achartengine,并完成了所有工作,我有一个问题,我在线图我提到xaxis标签,但它的显示像2,4,6,8,10,12等等用我的xaxis标签覆盖,我想隐藏2,4,6,8,10,12个xaxis标签。如果你不明白看给出如下图所示:AchartEngine折线图Xaxis Android

enter image description here

这里是全码:

public class ChartExample extends Activity { 
    private GraphicalView mChartView; 

    XYMultipleSeriesRenderer renderer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_chart); 

     LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout2); 

     String[] titles = new String[] { "spens1","2second" }; 
     List<double[]> x = new ArrayList<double[]>(); 
     x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); 
     x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); 
     // } 
     List<double[]> values = new ArrayList<double[]>(); 
     values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 
         10 }); 
     values.add(new double[] { 11, 13, 21, 10, 40, 10, 12,15, 24, 20, 15, 
       12 }); 


     int[] colors = new int[] { Color.BLUE,Color.RED}; 
     PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,PointStyle.CIRCLE}; 

     renderer = buildRenderer(colors, styles); 

     int length = renderer.getSeriesRendererCount(); 
     for (int i = 0; i < length; i++) { 
      ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)) 
        .setFillPoints(true); 
     } 

     setChartSettings(renderer, "SCORE CARD VIEW", "Attetempts", 
       "Marks Scored", 0, 12.5, 0, 45, Color.LTGRAY, Color.LTGRAY); 
     renderer.setXLabels(12); 
     renderer.setYLabels(10); 
     renderer.setShowGrid(false); 
     renderer.setXLabelsAlign(Align.CENTER); 
     renderer.setYLabelsAlign(Align.CENTER); 

     //renderer.setZoomButtonsVisible(true); 
     //renderer.setPanLimits(new double[] { 0, 20, 0, 40 }); 
     //renderer.setZoomLimits(new double[] { 0, 20, 0, 40 }); 
     renderer.setPanEnabled(false, false); 
     renderer.setZoomEnabled(false, false); 
     renderer.setShowLegend(false);  


     for(int k=0;k<12;k++) 
     { 
      renderer.addXTextLabel(k+1,"test"); 
     } 

     if (mChartView == null) 
     { 
      Log.d("Oncreate ", "if (mChartView == null)"); 
      mChartView = ChartFactory.getLineChartView(this, mDataset(titles, 
        x, values), renderer); 
      layout.addView(mChartView, new LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 




     } 
     else 
     { 
      mChartView.repaint(); 
      Log.d("Oncreate ", "if (mChartView != null)"); 
     } 
    } 

    private void setChartSettings(XYMultipleSeriesRenderer renderer3, 
      String title, String xTitle, String yTitle, double xMin, 
      double xMax, double yMin, double yMax, int axesColor, 
      int labelsColor) { 
     // TODO Auto-generated method stub 

     renderer3.setChartTitle(title); 
     renderer3.setXTitle(xTitle); 
     renderer3.setYTitle(yTitle); 
     renderer3.setXAxisMin(xMin); 
     renderer3.setXAxisMax(xMax); 
     renderer3.setYAxisMin(yMin); 
     renderer3.setYAxisMax(yMax); 
     renderer3.setAxesColor(axesColor); 
     renderer3.setLabelsColor(labelsColor); 
    } 

    private XYMultipleSeriesRenderer buildRenderer(int[] colors, 
      PointStyle[] styles) { 
     // TODO Auto-generated method stub 
     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
     setRenderer(renderer, colors, styles); 
     return renderer; 
    } 

    private void setRenderer(XYMultipleSeriesRenderer renderer2, int[] colors, 
      PointStyle[] styles) { 
     // TODO Auto-generated method stub 
     renderer2.setAxisTitleTextSize(16); 
     renderer2.setChartTitleTextSize(20); 
     renderer2.setLabelsTextSize(15); 
     renderer2.setLegendTextSize(15); 
     renderer2.setPointSize(5f); 
     renderer2.setMargins(new int[] { 20, 30, 15, 20 }); 
     int length = colors.length; 
     for (int i = 0; i < length; i++) { 
      XYSeriesRenderer r = new XYSeriesRenderer(); 
      r.setColor(colors[i]); 
      r.setPointStyle(styles[i]); 
      renderer2.addSeriesRenderer(r); 
     } 
    } 

    private XYMultipleSeriesDataset mDataset(String[] titles, 
      List<double[]> xValues, List<double[]> yValues) { 
     // TODO Auto-generated method stub 
     XYMultipleSeriesDataset dataset1 = new XYMultipleSeriesDataset(); 
     addXYSeries(dataset1, titles, xValues, yValues, 0); 
     return dataset1; 
    } 

    private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, 
      List<double[]> xValues, List<double[]> yValues, int scale) { 
     // TODO Auto-generated method stub 

     int length = titles.length; 
     for (int i = 0; i < length; i++) { 


      double[] xV = xValues.get(i); 
      XYSeries series = new XYSeries(titles[i], scale); 
      double[] yV = yValues.get(i); 
      int seriesLength = xV.length; 
      for (int k = 0; k < seriesLength; k++) { 
        series.add(xV[k], yV[k]); 
      } 
      dataset.addSeries(series); 
     } 



    } 

} 

你能帮助我不胜感激。

回答

7

我终于得到了解决,我有以下试试这个代码:

renderer.setXLabels(0); 

和满级的代码在这里:

package com.example.lockexample; 

import java.util.ArrayList; 
import java.util.List; 

import org.achartengine.ChartFactory; 
import org.achartengine.GraphicalView; 
import org.achartengine.chart.PointStyle; 
import org.achartengine.model.XYMultipleSeriesDataset; 
import org.achartengine.model.XYSeries; 
import org.achartengine.renderer.XYMultipleSeriesRenderer; 
import org.achartengine.renderer.XYSeriesRenderer; 

import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.Paint.Align; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.LinearLayout; 

public class ChartExample extends Activity { 
    private GraphicalView mChartView; 

    XYMultipleSeriesRenderer renderer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_chart); 

     LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout2); 

     String[] titles = new String[] { "spens1","2second" }; 
     List<double[]> x = new ArrayList<double[]>(); 
     x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); 
     x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); 
     // } 
     List<double[]> values = new ArrayList<double[]>(); 
     values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 
         10 }); 
     values.add(new double[] { 11, 13, 21, 10, 40, 10, 12,15, 24, 20, 15, 
       12 }); 


     int[] colors = new int[] { Color.BLUE,Color.RED}; 
     PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,PointStyle.CIRCLE}; 

     renderer = buildRenderer(colors, styles); 

     int length = renderer.getSeriesRendererCount(); 
     for (int i = 0; i < length; i++) { 
      ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)) 
        .setFillPoints(true); 
     } 

     setChartSettings(renderer, "SCORE CARD VIEW", "Attetempts", 
       "Marks Scored", 0, 12.5, 0, 45, Color.LTGRAY, Color.LTGRAY); 
     //renderer.setXLabels(12); 
     renderer.setYLabels(10); 
     renderer.setXLabels(0); 
     renderer.setShowGrid(true); 
     renderer.setXLabelsAlign(Align.CENTER); 
     renderer.setYLabelsAlign(Align.RIGHT); 
     renderer.setMargins(new int[] { 25,35, 10, 15 }); 
     //renderer.setZoomButtonsVisible(true); 
     //renderer.setPanLimits(new double[] { 0, 20, 0, 40 }); 
     //renderer.setZoomLimits(new double[] { 0, 20, 0, 40 }); 
     renderer.setPanEnabled(false, false); 
     renderer.setZoomEnabled(false, false); 

     renderer.setMarginsColor(Color.parseColor("#EEEDED")); 
     renderer.setXLabelsColor(Color.BLACK); 
     renderer.setYLabelsColor(0,Color.BLACK); 

     renderer.setApplyBackgroundColor(true); 
     renderer.setBackgroundColor(Color.parseColor("#FBFBFC")); 
     //renderer.setShowLegend(false);  


     for(int k=0;k<12;k++) 
     { 
      renderer.addXTextLabel(k+1,"test"); 
     } 

     if (mChartView == null) 
     { 
      Log.d("Oncreate ", "if (mChartView == null)"); 
      mChartView = ChartFactory.getLineChartView(this, mDataset(titles, 
        x, values), renderer); 
      layout.addView(mChartView, new LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 




     } 
     else 
     { 
      mChartView.repaint(); 
      Log.d("Oncreate ", "if (mChartView != null)"); 
     } 
    } 

    private void setChartSettings(XYMultipleSeriesRenderer renderer3, 
      String title, String xTitle, String yTitle, double xMin, 
      double xMax, double yMin, double yMax, int axesColor, 
      int labelsColor) { 
     // TODO Auto-generated method stub 

     renderer3.setChartTitle(title); 
     renderer3.setXTitle(xTitle); 
     renderer3.setYTitle(yTitle); 
     renderer3.setXAxisMin(xMin); 
     renderer3.setXAxisMax(xMax); 
     renderer3.setYAxisMin(yMin); 
     renderer3.setYAxisMax(yMax); 
     renderer3.setAxesColor(axesColor); 
     renderer3.setLabelsColor(labelsColor); 

    } 

    private XYMultipleSeriesRenderer buildRenderer(int[] colors, 
      PointStyle[] styles) { 
     // TODO Auto-generated method stub 
     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
     setRenderer(renderer, colors, styles); 
     return renderer; 
    } 

    private void setRenderer(XYMultipleSeriesRenderer renderer2, int[] colors, 
      PointStyle[] styles) { 
     // TODO Auto-generated method stub 
     renderer2.setAxisTitleTextSize(16); 
     renderer2.setChartTitleTextSize(20); 
     renderer2.setLabelsTextSize(15); 
     renderer2.setLegendTextSize(15); 
     renderer2.setPointSize(5f); 
     //renderer2.setMargins(new int[] { 20, 30, 15, 20 }); 
     renderer2.setMargins(new int[] { 25,35, 10, 15 }); 

     int length = colors.length; 
     for (int i = 0; i < length; i++) { 
      XYSeriesRenderer r = new XYSeriesRenderer(); 
      r.setColor(colors[i]); 
      r.setPointStyle(styles[i]); 
      renderer2.addSeriesRenderer(r); 
     } 
    } 

    private XYMultipleSeriesDataset mDataset(String[] titles, 
      List<double[]> xValues, List<double[]> yValues) { 
     // TODO Auto-generated method stub 
     XYMultipleSeriesDataset dataset1 = new XYMultipleSeriesDataset(); 
     addXYSeries(dataset1, titles, xValues, yValues, 0); 
     return dataset1; 
    } 

    private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, 
      List<double[]> xValues, List<double[]> yValues, int scale) { 
     // TODO Auto-generated method stub 

     int length = titles.length; 
     for (int i = 0; i < length; i++) { 


      double[] xV = xValues.get(i); 
      XYSeries series = new XYSeries(titles[i], scale); 
      double[] yV = yValues.get(i); 
      int seriesLength = xV.length; 
      for (int k = 0; k < seriesLength; k++) { 
        series.add(xV[k], yV[k]); 
      } 
      dataset.addSeries(series); 
     } 



    } 

} 
-1

你需要添加到您当前密码的唯一代码是以下两个行:

renderer.setXLabels(RESULT_OK); 
renderer.clearXTextLabels(); 

请确保在声明您的渲染器设置后添加这些语句,但之前您设置您的自定义X轴文本标签的代码。

由于您的程序中有多个呈现器方法正在进行,因此您应该在实现XYMultipleSeriesRenderer的方法末尾包含这两行代码。再次,确保在实现自定义文本标签之前将其添加到代码中。 :)

+0

什么是RESULT_OK?为什么要在添加自定义标签之前调用setXLabels()? – 2013-04-06 09:34:44