安卓 - 如何使用achartengine更改图形的背景颜色

10

我使用achartengine实现了折线图。但是我想要改变折线图的背景颜色。有人建议使用以下代码来改变背景颜色:

mRenderer.setApplyBackgroundColor(true); mRenderer.setBackgroundColor(Color.RED);

但它不会改变整个背景。我想要改变整个背景,是否可能?如果可以,那么请问如何操作呢?请问是否有人可以帮助我。下面的图片是上述代码的输出结果。我想要改变整个背景颜色(即将其余黑色部分也变成白色)。Grpah without entire bgcolor

Alinegraph.java

公共类ALinegraph扩展自Activity

/** 当活动首次创建时调用 */

@Override

public void onCreate(Bundle savedInstanceState)

{

    super.onCreate(savedInstanceState);      
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);   
    setContentView(R.layout.main);

    Button Linegraph = (Button) findViewById(R.id.Linegraph);
    Linegraph.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
              Linegraphpage ACTC = new Linegraphpage();
              Intent intent = ACTC.execute(ALinegraph.this);
              startActivity(intent);                  
        }});           
}

}

->

}

Linegraphpage.java

public class Linegraphpage extends AbstractDemoChart

{

  /**
   * Returns the chart name.
   * 
   * @return the chart name
   */
  public String getName() {
    return "Average temperature";
  }

  /**
   * Returns the chart description.
   * 
   * @return the chart description
   */
  public String getDesc() {
    return "The average temperature in 4 Greek islands (line chart)";
  }

  /**
   * Executes the chart demo.
   * 
   * @param context the context
   * @return the built intent
   */
  public Intent execute(Context context) {
    String[] titles = new String[] { "Crete","Corfu"};
    List<double[]> x = new ArrayList<double[]>();
    for (int i = 0; i < titles.length; i++) {
      x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
    }
    List<double[]> values = new ArrayList<double[]>();
    values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4, 26.1, 23.6, 20.3 });
    values.add(new double[] { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 });

    int[] colors = new int[] { Color.CYAN,Color.GREEN};
    PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,PointStyle.POINT};
    XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
    int length = renderer.getSeriesRendererCount();
    for (int i = 0; i < length; i++) {
      ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
    }
    setChartSettings(renderer, "", "", "price", 0, 12, 0, 190,
        Color.GREEN, Color.GREEN);
    renderer.setXLabels(10);
    renderer.setYLabels(7);    
    renderer.setShowGrid(false);
    renderer.setXLabelsAlign(Align.RIGHT);
    renderer.setYLabelsAlign(Align.RIGHT);
    renderer.setApplyBackgroundColor(true);
    renderer.setBackgroundColor(Color.WHITE);
    renderer.setZoomButtonsVisible(true);
    renderer.setPanLimits(new double[] { -10, 20, -10, 40 });
    renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });

    Intent intent = ChartFactory.getLineChartIntent(context, buildDataset(titles, x, values),
        renderer, "");
    return intent;
  }

}

更新的图片

在此输入图片描述


你可以在使用 renderer.setBackgroundColor(Color.BLACK); 后发布图片吗? - Tofeeq Ahmad
我使用你的代码更新了图片。但默认颜色回来了,所以我想把它改成白色。这可能吗? - naresh
我认为你的问题已经得到解决,因为你接受了答案。无论如何,我认为那应该可以完全背景工作。 - Tofeeq Ahmad
有关透明背景,请参见此帖子 - Pang
1个回答

44

你还应该设置你的边距颜色:

mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.RED);
mRenderer.setMarginsColor(Color.RED);

这将使你的图表背景完全变为红色。


1
我认为你可以使用mRenderer.setMargins(new int[] {20, 30, 15, 0});。 - Hanry
1
是的,它正在工作。这里的30表示y轴值和文本之间的距离。15表示x轴文本和符号之间的距离。我不知道20和0的值。请问您能解释一下吗? - naresh
不幸的是,将边距颜色设置为透明会导致黑色的颜色...嗯。 - Jeffrey Blattman
我该如何展示两种颜色,一种在线条上方,另一种在线条下方? - Issac Balaji
我找到了解决方案,只需添加以下几行代码:incomeRenderer.setFillBelowLine(true); incomeRenderer.setFillBelowLineColor(getResources().getColor(R.color.graph_shadow)); incomeRenderer.setFillPoints(true); - Issac Balaji
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接