Android: I am using AChartEngine library for graphs, but not able to integrate achartengine's graph view with android xml?

StackOverflow https://stackoverflow.com/questions/4062161

  •  27-09-2019
  •  | 
  •  

Question

My application requires graph library and I am using achartengine graph library. My app requires graph to be only 50% of the screen and other part is used to display some other information.

Is it possible have xml resource file for achartengine's graph APIs and how to do it?

I tried to find an example but didn't find it. Is it supported or not?

Was it helpful?

Solution

This is a FAQ for AChartEngine. The AChartEngine demo application is available for download here: AChartEngine demo

In the demo source code you can see an example on how to embed a chart into an existing view.

Basically, in the activity descriptor .xml file, we have defined the following as a placeholder for the chart. Of course, other user interface components go together with this layout:

ChartDemo/layout/xy_chart.xml near Line 27

<LinearLayout
    android:id="@+id/chart"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="horizontal" />

We define a local variable:

ChartDemo/src/org.achartengine.chartdemo.demo.chart/XYChartBuilder.java near Line 68

private GraphicalView mChartView;

We instantiate it on the onResume() method of the activity:

ChartDemo/src/org.achartengine.chartdemo.demo.chart/XYChartBuilder.java near Line 163

protected void onResume() {
  super.onResume();
  if (mChartView == null) {
    LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
    mChartView = ChartFactory.getLineChartView(this, mDataset,
mRenderer);
    layout.addView(mChartView, new LayoutParams
(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    ...
  } else {
    mChartView.repaint();
  }
}

Whenever new data is added (when the user presses the "Add" button in our case, a new point is added in the current series and:

ChartDemo/src/org.achartengine.chartdemo.demo.chart/XYChartBuilder.java near Line 147

if (mChartView != null) {
  mChartView.repaint();
}

OTHER TIPS

There are two sets of APIs in ChartFactory. For eg. getLineChartView() and getLineChartIntent(). So former is used to get a graphical view which can be added to customized layout and later is used to get the intent. In above example Dan has used getLineChartView() API which returns a GraphicalView.

You can write your xml like this...

<LinearLayout 
android:layout_below="@+id/btn"
android:id="@+id/chart" android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_weight="1">

</LinearLayout>

and the java code snippet is

   protected void onResume() {
      super.onResume();
      if (mChartView == null) {
        LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
        mChartView = ChartFactory.getBarChartView(this,getBarDemoDataset(values),renderer,Type.DEFAULT);
        layout.addView(mChartView);


      } else {
        mChartView.repaint();
      }
    }

So here is a self sufficient place to find all about AChartEngine. Which includes link to download,

  1. achartengine-1.1.0-demo-source.zip The AChartEngine 1.1.0 demo project source code. May 15 May 15 168 KB 8149
  2. achartengine-1.1.0-javadocs.zip The AChartEngine 1.1.0 javadoc documentation. May 15 May 15 374 KB 3610
  3. achartengine-1.1.0.jar The AChartEngine 1.1.0 binary build library. May 15 May 15 117 KB 5264

Which are latest for now(while posting this answer). Now follow these easy steps in order to add new chart file:

  • Download and add achartengine-1.1.0.jar to your project's lib section
  • Now right click on file and add it to build path, like in image

    Add jar to your project

  • Now as define in previous answers, add following code to your class:

    private GraphicalView mChartView;
    private XYMultipleSeriesDataset dataset;
    private XYMultipleSeriesRenderer renderer;
    private BarChart.Type type;
    
    
     protected void onResume() {
          super.onResume(); 
          if (mChartView == null) {
            LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
            /*getBarChartView(android.content.Context context, XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, BarChart.Type type)
              Creates a bar chart view.*/
            mChartView = ChartFactory.getBarChartView(this, dataset, renderer, type);//tView(this,getBarDemoDataset(values),renderer,Type.DEFAULT);
            layout.addView(mChartView);
          } else {
            mChartView.repaint();
          }
        }
    
    • To get detail about any class of AChartEngineAPI, download achartengine-1.1.0-javadocs.zip and open by clicking in index.html

    • achartengine-1.1.0-demo-source.zip will be helpful during further deepar development where you can take reference for all charts

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top