Disable Zoom but keep Pan enabled in achartengine android - android

I am trying to disable pinch zoom but still keep the pan for x true, so that I can scroll in the x axis to see my values
renderer.setPanEnabled(true, false);
renderer.setZoomEnabled(false, false);
This is not working. Zoom still seems to work and is not disabled. Any suggestions will be highly appreciated ?
Here is the code snippet :
public class PerformanceGraph {
public View getView(Context context, List<SessionData> sessionDataList,int filterViewTotalShots) {
int Y_MAX = (filterViewTotalShots*10);
int Y_MIN = 0;
int PADDING = (int)(Y_MAX*0.05);
XYMultipleSeriesRenderer seriesRenderer = new XYMultipleSeriesRenderer();
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding the Goal Series
Integer goalScore = new GoalDatabase(context).GetGoalScore(filterViewTotalShots);
XYSeries lineGoal = new XYSeries("Goal");
lineGoal.add(0, goalScore);
if(sessionDataList.size() == 0){
lineGoal.add(0, goalScore);
}
else {
lineGoal.add(sessionDataList.size()-1, goalScore);
}
dataset.addSeries(lineGoal);
XYSeriesRenderer lineGoalRenderer = new XYSeriesRenderer();
lineGoalRenderer.setChartValuesSpacing(1f);
lineGoalRenderer.setColor(Color.rgb(140, 131, 131)); // #8c8383
lineGoalRenderer.setLineWidth(2f);
seriesRenderer.addSeriesRenderer(lineGoalRenderer);
// Adding Score Series
TimeSeries series = new TimeSeries("Scores");
for(int i=0;i<sessionDataList.size();i++) {
SessionData data = sessionDataList.get(i);
series.add(i, data.getTotalScore());
series.addAnnotation(Utils.customFormattedDate(data.getDate()), i, Y_MIN - (2*PADDING) );
// Creating line series to draw vertical lines
XYSeries line = new XYSeries("Line");
line.add(i, Y_MIN);
line.add(i, Y_MAX);
line.addAnnotation( data.getTotalScore() + "", i, Y_MAX + PADDING);
dataset.addSeries(line);
XYSeriesRenderer lineRenderer = new XYSeriesRenderer();
lineRenderer.setChartValuesSpacing(1f);
lineRenderer.setColor(Color.rgb(135, 38, 36)); // #7d2624
lineRenderer.setLineWidth(2f);
lineRenderer.setAnnotationsColor(Color.rgb(140, 131, 131)); // #8c8383
lineRenderer.setAnnotationsTextSize(22f);
seriesRenderer.addSeriesRenderer(lineRenderer);
}
dataset.addSeries(series);
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setPointStyle(PointStyle.CIRCLE);
renderer.setFillPoints(true);
renderer.setColor(Color.WHITE);
renderer.setLineWidth(4f);
renderer.setAnnotationsColor(Color.GRAY);
renderer.setAnnotationsTextSize(22f);
seriesRenderer.addSeriesRenderer(renderer);
seriesRenderer.setShowAxes(false);
seriesRenderer.setShowLegend(false);
seriesRenderer.setShowLabels(false);
seriesRenderer.setZoomButtonsVisible(false);
seriesRenderer.setPanEnabled(true, false);
seriesRenderer.setZoomEnabled(false, false);
seriesRenderer.setMargins(new int[] {0, 0, 0, 0});
seriesRenderer.setXAxisMin(-1);
seriesRenderer.setXAxisMax(10);
seriesRenderer.setYAxisMin(Y_MIN - (3*PADDING));
seriesRenderer.setYAxisMax(Y_MAX + (3*PADDING));
seriesRenderer.setPointSize(10f);
seriesRenderer.setTextTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/Lifestyle Rounded M54.ttf"));
View view = ChartFactory.getLineChartView(context, dataset, seriesRenderer);
return view;
}
}

Means this the answer (as u commented) .I am writing it here so that it can help others.
seriesRenderer.setPanEnabled(true, false);
seriesRenderer.setZoomEnabled(false, false);

Related

Dynamic line chart using Achartengine is not working

I am making dynamic line chart using Achartengine and this is working on static data but not working on dynamic data.Actual,plan and month is dynamic.I want to create line chart based on the values of actual,plan and month.I am using below code.
private void drawChart() {
XYSeries actualSeries = new XYSeries("Actual");
// Creating an XYSeries for Expense<br />
XYSeries planSeries = new XYSeries("Plan");
// Adding data to Income and Expense Series
for (int i = 0; i <actualList.size; i++) {
actualSeries.add(i,Double.parseDouble(actualList.get(i)));
planSeries.add(i,Double.parseDouble(planList.get(i)));
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset xyMultipleSeriesDataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
xyMultipleSeriesDataset.addSeries(actualSeries);
// Adding Expense Series to dataset
xyMultipleSeriesDataset.addSeries(planSeries);
XYSeriesRenderer actualRenderer = new XYSeriesRenderer();
actualRenderer.setColor(Color.GREEN);
actualRenderer.setPointStyle(PointStyle.CIRCLE);
actualRenderer.setFillPoints(true);
actualRenderer.setLineWidth(2);
actualRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer planRenderer = new XYSeriesRenderer();
planRenderer.setColor(Color.RED);
planRenderer.setPointStyle(PointStyle.CIRCLE);
planRenderer.setFillPoints(true);
planRenderer.setLineWidth(2);
planRenderer.setDisplayChartValues(true);
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setLabelsColor(Color.RED);
multiRenderer.setPanEnabled(false, false);
/* multiRenderer.setYLabels(5);
multiRenderer.setXLabels(1);
*/ multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setYLabelsColor(0, Color.BLACK);
//* multiRenderer.setShowGridX(true);
//multiRenderer.setShowGridY(true)
multiRenderer.setGridColor(Color.BLACK);
multiRenderer.setChartTitle("Plan vs Actual Curve");
multiRenderer.setXTitle("Months");
multiRenderer.setYTitle("plan/actual");
multiRenderer.setZoomButtonsVisible(false);
for (int i = 0; i < monthList.size(); i++) {
multiRenderer.addXTextLabel(i + 1, monthList.get(i).toString());
}
multiRenderer.addSeriesRenderer(actualRenderer);
multiRenderer.addSeriesRenderer(planRenderer);
// Getting a reference to LinearLayout of the MainActivity Layout<br />
LinearLayout chartContainer = (LinearLayout) mView.findViewById(R.id.chart_container);
// Creating a Line Chart<br />
GraphicalView chart = ChartFactory.getLineChartView(getActivity(), xyMultipleSeriesDataset, multiRenderer);
chartContainer.addView(chart);
if (chart != null) {
chartContainer.removeView(chart);
chart.repaint();
}
}
Thanks in advance
I have solved my question myself after doing some research.The problem was UI update problem.Once the chart is plotted then for new data we have to remove that view and should create new chart view based on data.Below is the working code.
private void drawChart() {
// Creating an XYSeries for Income
XYSeries actualSeries = new XYSeries("Actual");
// Creating an XYSeries for Expense<br />
XYSeries planSeries = new XYSeries("Plan");
XYSeries cupOneSeries = new XYSeries("Cup1");
XYSeries cupTwoSeries = new XYSeries("Cup2");
XYSeries cupThreeSeries = new XYSeries("Cup3");
// Adding data to Income and Expense Series
Log.e("x axis value in curve", "" + xAxisValueList.size());
Log.e("size of Actual", actualList.size() + "");
Log.e("size of plan", planList.size() + "");
for (int i = 0; i < actualList.size(); i++) {
actualSeries.add(i, Math.round(Double.parseDouble(actualList.get(i))));
planSeries.add(i, Math.round(Double.parseDouble(planList.get(i))));
cupOneSeries.add(i, Math.round(Double.parseDouble(cupOneList.get(i))));
cupTwoSeries.add(i, Math.round(Double.parseDouble(cupTwoList.get(i))));
cupThreeSeries.add(i, Math.round(Double.parseDouble(cupThreeList.get(i))));
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset xyMultipleSeriesDataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
xyMultipleSeriesDataset.addSeries(actualSeries);
// Adding Expense Series to dataset
xyMultipleSeriesDataset.addSeries(planSeries);
xyMultipleSeriesDataset.addSeries(cupOneSeries);
xyMultipleSeriesDataset.addSeries(cupTwoSeries);
xyMultipleSeriesDataset.addSeries(cupThreeSeries);
XYSeriesRenderer actualRenderer = new XYSeriesRenderer();
actualRenderer.setColor(getActivity().getResources().getColor(R.color.logo_blue));
actualRenderer.setPointStyle(PointStyle.CIRCLE);
actualRenderer.setFillPoints(true);
actualRenderer.setLineWidth(2);
actualRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer planRenderer = new XYSeriesRenderer();
planRenderer.setColor(getActivity().getResources().getColor(R.color.logo_orange));
planRenderer.setPointStyle(PointStyle.CIRCLE);
planRenderer.setFillPoints(true);
planRenderer.setLineWidth(2);
planRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupOneRenderer = new XYSeriesRenderer();
cupOneRenderer.setColor(getActivity().getResources().getColor(R.color.black));
cupOneRenderer.setPointStyle(PointStyle.CIRCLE);
cupOneRenderer.setFillPoints(true);
cupOneRenderer.setLineWidth(2);
cupOneRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupTwoRenderer = new XYSeriesRenderer();
cupTwoRenderer.setColor(getActivity().getResources().getColor(R.color.green));
cupTwoRenderer.setPointStyle(PointStyle.CIRCLE);
cupTwoRenderer.setFillPoints(true);
cupTwoRenderer.setLineWidth(2);
cupTwoRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupThreeRenderer = new XYSeriesRenderer();
cupThreeRenderer.setColor(Color.parseColor("#0D8ECF"));
cupThreeRenderer.setPointStyle(PointStyle.CIRCLE);
cupThreeRenderer.setFillPoints(true);
cupThreeRenderer.setLineWidth(2);
cupThreeRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart<br />
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setLabelsColor(Color.RED);
multiRenderer.setPanEnabled(true,false);
/* multiRenderer.setLabelsTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
multiRenderer.setLegendTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
*/ multiRenderer.setChartValuesTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setYLabelsColor(0, Color.BLACK);
multiRenderer.setShowGridX(true);
multiRenderer.setShowGridY(true);
multiRenderer.setGridColor(Color.BLACK);
multiRenderer.setChartTitle("Plan vs Actual Curve");
multiRenderer.setXTitle("Months");
multiRenderer.setYTitle("plan/actual");
multiRenderer.setZoomButtonsVisible(false);
multiRenderer.setZoomEnabled(true);
for (int i = 0; i < monthList.size(); i++) {
multiRenderer.addXTextLabel(i, monthList.get(i).toString());
}
multiRenderer.addSeriesRenderer(actualRenderer);
multiRenderer.addSeriesRenderer(planRenderer);
multiRenderer.addSeriesRenderer(cupOneRenderer);
multiRenderer.addSeriesRenderer(cupTwoRenderer);
multiRenderer.addSeriesRenderer(cupThreeRenderer);
Log.e("size of actual log",actualList.size()+"");
LinearLayout chartContainer = (LinearLayout) mView.findViewById(R.id.chart_container);
if (monthList.size() > 0) {
// Getting a reference to LinearLayout of the MainActivity Layout<br />
chartContainer.removeAllViews();
//drawing bar chart<br />
chart = ChartFactory.getLineChartView(getActivity(), xyMultipleSeriesDataset, multiRenderer);
//adding the view to the linearlayout<br />
chartContainer.addView(chart);
} else {
chartContainer.removeAllViews();
CustomToast.initToast(getActivity(),"No data available for S-curve");
}
}

AChartEngine Custom Axis

ScreenShot
Hello, i have a trouble with bar chart, i must remove this sticks on X and Y axis above numbers but i don't know how to do this, here is my code for creating chart: `String[] monthDays = new String[lastDayOfMonth];
// Create month days labels
int[] x = new int[lastDayOfMonth];
for (int i = 0; i < monthDays.length; i++) {
monthDays[i] = "" + (i + 1);
x[i] = i + 1;
}
// Create series
XYSeries majorSeries = new XYSeries("Major");
XYSeries middleSeries = new XYSeries("Middle");
XYSeries minorSeries = new XYSeries("Minor");
XYSeries restSeries = new XYSeries("Rest");
// Add data to series
for(int i = 0; i < x.length; i++) {
majorSeries.add(i, majorData[i]);
middleSeries.add(i, middleData[i]);
minorSeries.add(i, minorData[i]);
restSeries.add(i, restData[i]);
}
// Create series data set
XYMultipleSeriesDataset xyMultipleSeriesDataset = new XYMultipleSeriesDataset();
// Add series to data set
xyMultipleSeriesDataset.addSeries(restSeries);
xyMultipleSeriesDataset.addSeries(minorSeries);
xyMultipleSeriesDataset.addSeries(middleSeries);
xyMultipleSeriesDataset.addSeries(majorSeries);
// Create series render for major data set
XYSeriesRenderer majorXySeriesRenderer = new XYSeriesRenderer();
majorXySeriesRenderer.setColor(Color.parseColor("#4797b4"));
majorXySeriesRenderer.setFillPoints(true);
majorXySeriesRenderer.setLineWidth(2);
// Create series render for middle data set
XYSeriesRenderer middleXySeriesRenderer = new XYSeriesRenderer();
middleXySeriesRenderer.setColor(Color.parseColor("#4ec697"));
middleXySeriesRenderer.setFillPoints(true);
middleXySeriesRenderer.setLineWidth(2);
// Create series render for minor data set
XYSeriesRenderer minorXySeriesRenderer = new XYSeriesRenderer();
minorXySeriesRenderer.setColor(Color.parseColor("#1fb1ba"));
minorXySeriesRenderer.setFillPoints(true);
minorXySeriesRenderer.setLineWidth(2);
// Create series render for rest data set
XYSeriesRenderer restXySeriesRenderer = new XYSeriesRenderer();
restXySeriesRenderer.setColor(Color.parseColor("#c2c2c2"));
restXySeriesRenderer.setFillPoints(true);
restXySeriesRenderer.setLineWidth(2);
// Creating XYMultipleSeriesRenderer to customize chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setOrientation(XYMultipleSeriesRenderer.Orientation.HORIZONTAL);
// Add labels to x
for(int i = 0; i < monthDays.length; i++) {
multiRenderer.addXTextLabel(i, monthDays[i]);
}
multiRenderer.setXLabels(0);
multiRenderer.setYLabels(0);
multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setYLabelsColor(0, Color.BLACK);
multiRenderer.setLabelsTextSize(24);
multiRenderer.setZoomButtonsVisible(false);
multiRenderer.setPanEnabled(true, false);
multiRenderer.setPanLimits(new double[] {-0.75, 31, 0, 0});
multiRenderer.setClickEnabled(false);
multiRenderer.setZoomEnabled(false, false);
multiRenderer.setShowGridY(false);
multiRenderer.setShowGridX(false);
multiRenderer.setFitLegend(true);
multiRenderer.setShowAxes(false);
multiRenderer.setShowLegend(false);
multiRenderer.setShowGrid(false);
multiRenderer.setZoomEnabled(false);
multiRenderer.setExternalZoomEnabled(false);
multiRenderer.setAntialiasing(true);
multiRenderer.setInScroll(true);
multiRenderer.setLegendHeight(30);
multiRenderer.setXLabelsAlign(Paint.Align.CENTER);
multiRenderer.setYLabelsAlign(Paint.Align.LEFT);
multiRenderer.setTextTypeface("sans_serif", Typeface.NORMAL);
multiRenderer.setYAxisMax(maxValue + (maxValue * 2 / 100));
multiRenderer.addYTextLabel(0, currency + "0.0");
if (maxValue == 0) {
multiRenderer.setYAxisMax(500);
multiRenderer.addYTextLabel(500, currency + maxValue);
} else {
multiRenderer.addYTextLabel(multiRenderer.getYAxisMax(), currency + maxValue);
}
multiRenderer.setXAxisMin(-0.5);
multiRenderer.setXAxisMax(11);
multiRenderer.setBarSpacing(0.5);
multiRenderer.setBackgroundColor(Color.TRANSPARENT);
multiRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00));
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setMargins(new int[]{30, 30, 30, 30});
// Add all renders to multi render
multiRenderer.addSeriesRenderer(restXySeriesRenderer);
multiRenderer.addSeriesRenderer(minorXySeriesRenderer);
multiRenderer.addSeriesRenderer(middleXySeriesRenderer);
multiRenderer.addSeriesRenderer(majorXySeriesRenderer);
// Create array of chart types
CombinedXYChart.XYCombinedChartDef[] types = new CombinedXYChart.XYCombinedChartDef[]{
new CombinedXYChart.XYCombinedChartDef(BarChart.TYPE, 0),
new CombinedXYChart.XYCombinedChartDef(BarChart.TYPE, 1),
new CombinedXYChart.XYCombinedChartDef(BarChart.TYPE, 2),
new CombinedXYChart.XYCombinedChartDef(BarChart.TYPE, 3)};
// Get view of chart
GraphicalView graphicalView = ChartFactory.getCombinedXYChartView(getContext(), xyMultipleSeriesDataset, multiRenderer, types);
chart.removeAllViews();
chart.addView(graphicalView);`
Solved
To do this you can set labels color same as your background or transparent
multiRenderer.setXLabelsColor(Color.WHITE);
multiRenderer.setYLabelsColor(0, Color.WHITE);
After this you have to create your own class that extends chart class witch you need
public class MyChart extends CombinedXYChart {
int color;
public MyChart(XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, XYCombinedChartDef[] chartDefinitions) {
super(dataset, renderer, chartDefinitions);
}
#Override
protected void drawString(Canvas canvas, String text, float x, float y, Paint paint) {
paint.setColor(color);
super.drawString(canvas, text, x, y, paint);
}
public void setColor(int color) {
this.color = color;
}}
And finally you have to use your own class to create graphicalView and place it in layout
MyChart myChart = new MyChart(xyMultipleSeriesDataset, multiRenderer, types);
myChart.setColor(Color.BLACK);
GraphicalView graphicalView = new GraphicalView(getContext(), myChart);
This steps will override method from AbstractChart class witch draws only text values in your chart, but sticks will remain same color as your background, so they would be invisible

How to remove space between bars in achart engine Android

Hi, please help me to remove space between bars in chart and set
bars very close. have tried many ways. Anyone have solution,
please suggest me.Thanks in advance.The following is my code.
void drawChart(String[] items, float[] amount){
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
XYSeries[] qtySeries = new XYSeries[amount.length];
XYSeriesRenderer[] qtyRenderer = new XYSeriesRenderer[amount.length];
for(int i=0;i<amount.length ;i++){
qtySeries[i] = new XYSeries("");
qtySeries[i].add(i,amount[i]);
dataset.addSeries(qtySeries[i]);
qtyRenderer[i] = new XYSeriesRenderer();
qtyRenderer[i].setColor(color[i]);
qtyRenderer[i].setDisplayChartValues(true);
qtyRenderer[i].setChartValuesTextSize(15);
qtyRenderer[i].setChartValuesSpacing(22);
mRenderer.addSeriesRenderer(qtyRenderer[i]);
mRenderer.addXTextLabel(i+1, items[i]);
}
float max=amount[0];
for (int i = 0; i < amount.length; i++) {
if (amount[i] > max) {
max = amount[i];
}
}
mRenderer.setYAxisMax(max + 20);
mRenderer.setOrientation(XYMultipleSeriesRenderer.Orientation.VERTICAL);
mRenderer.setBarWidth(40f);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setBarSpacing(0.5);
mRenderer.setShowLegend(false);
mRenderer.setPanEnabled(true, false);
mRenderer.setZoomEnabled(false,false);
mRenderer.setXLabelsColor(Color.WHITE);
mRenderer.setYLabelsColor(0,Color.WHITE);
mRenderer.setXLabelsPadding(0.0f);
mRenderer.setYAxisMin(0);
mRenderer.setBarSpacing(0.0f);
lLytHourlyChart.removeAllViews();
lLytHourlyChart.addView(ChartFactory.getBarChartView(getActivity(), dataset, mRenderer, BarChart.Type.DEFAULT));
}
add bar spacing
mRenderer.setBarSpacing(-1);

AchartEngine Barchart Spacing not working when orientation is vertical and number of elements are 2

I am having a AchartEngine Barchart. I have only two bars to show with Orientation as Vertical. The space between the two bars is very high and I am not able to change it. I have tried the following
1. Change the values passed to setBarSpacing() method from -100, -10, -.9, -.5, -.1, 0, .1, .5, .9, 10, 100
2. Used two XYSeries and then one. In both cases, the space is significant
3. Increased and decreased width of Bar
4. Set the min, max and values at different ranges. min = .9, max = 2.1, x1 = 1, x2 = 2
Nothing is working. Can some one please help me with this?
Try the following method.
The method below adds a barchart showing data for two months with values. If you want to change the color and some other properties, you are free to do that.
private void createChart() {
String[] mMonth = new String[] { "Jan", "Feb" };
int[] mData = new int[] { 20, 25 };
// creating XY series for Data
XYSeries series = new XYSeries("Performance");
// fill the data
for (int i = 0; i < mMonth.length; i++) {
series.add(i, mData[i]);
}
// create a dataset to hold each data series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding dataseries to datast
dataset.addSeries(series);
// create a renderer to customize the series
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.GREEN);
renderer.setFillPoints(true);
renderer.setLineWidth(2);
renderer.setDisplayChartValues(true);
renderer.setChartValuesTextSize(30);
// create a renderer to customize entire chart
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setXLabels(0);
mRenderer.setXTitle("Quarter 1");
mRenderer.setYTitle("Values in K");
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setZoomButtonsVisible(false);
mRenderer.setZoomEnabled(false, false);
mRenderer.setPanEnabled(false, false);
// margins
int marginT = 50;
int marginL = 80;
int marginB = 15;
int marginR = 15;
mRenderer.setMargins(new int[] { marginT, marginL, marginB, marginR });
mRenderer.setShowLegend(false);
mRenderer.setAxisTitleTextSize(30);
// mRenderer.setChartTitleTextSize(20);
mRenderer.setLabelsTextSize(30);
mRenderer.setLegendTextSize(30);
// mRenderer.addXTextLabel(8, "OT");
mRenderer.setXAxisMin(-0.5);
mRenderer.setXAxisMax(3);
mRenderer.setYAxisMin(0);
mRenderer.setYLabelsAlign(Align.RIGHT);
mRenderer.setXLabelsColor(Color.BLACK);
mRenderer.setYLabelsColor(0, Color.BLACK);
mRenderer.setXLabels(0);
mRenderer.setBarSpacing(2);
// We want to avoid black border
// transparent margins
mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00));
for (int i = 0; i < mMonth.length; i++) {
mRenderer.addXTextLabel(i, mMonth[i]);
}
// adding renderer to multiple renderer(chart)
mRenderer.addSeriesRenderer(renderer);
GraphicalView view = ChartFactory.getBarChartView(this, dataset,
mRenderer, Type.STACKED);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.rlBarChart);
layout.addView(view, 0);
}
Hope this helps.

AChartEngine - How to Add onClickListener and conflict between setClickEnabled() and setPanEnabled()

I have an application that creates a bar chart based on Database values. In my main activity, I have this function:
public void onClick(View view){
BarGraph bar = new BarGraph();
bar.setCustomerCD(String.valueOf(spinner1.getSelectedItem()));
yagoDB.open();
ArrayList<String> stringList = yagoDB.getCustomerItem(String.valueOf(spinner1.getSelectedItem()));
String[] itemArray = new String[stringList.size()];
String[] returnedArray = stringList.toArray(itemArray);
bar.setItemCD(returnedArray);
bar.setMax(yagoDB.getQtyMax(String.valueOf(spinner1.getSelectedItem())));
bar.setItemCount(yagoDB.getItemCDCount(String.valueOf(spinner1.getSelectedItem())));
ArrayList<Integer> stringList2 = yagoDB.getCustomerQtyInt(String.valueOf(spinner1.getSelectedItem()));
yagoDB.close();
int[] returnedQty = convertIntegers(stringList2);
bar.setQty(returnedQty);
Intent barIntent = bar.getIntent(this);
startActivity(barIntent);
}
In this function, I'm basically creating an instance of my BarGraph class, initializing some of its variables, after which, I call its getIntent function. Here is the getIntent() function in the BarGraph class, the rest of the class contains setters and getters:
public Intent getIntent(Context context) {
int y[] = Qty;
CategorySeries series = new CategorySeries("Bar1");
for (int i = 0; i < y.length; i++) {
series.add("Bar" + (i + 1), y[i]);
}
// collection of series under one object, there could any number of series
XYMultipleSeriesDataset dataSet = new XYMultipleSeriesDataset();
dataSet.addSeries(series.toXYSeries());
// customization of the chart
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.BLUE);
renderer.setDisplayChartValues(true);
renderer.setChartValuesSpacing((float) 50d);
renderer.setChartValuesTextSize(30);
renderer.setLineWidth((float) 10.5d);
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.addSeriesRenderer(renderer);
mRenderer.setChartTitle("Sales for " + customerCD);
mRenderer.setXTitle("\n \n Item Codes");
mRenderer.setAxisTitleTextSize(30);
mRenderer.setChartTitleTextSize(30);
mRenderer.setLabelsTextSize(20);
mRenderer.setYTitle("\n\n\n\n\n\n\n Number of Orders");
mRenderer.setLabelsColor(Color.BLACK);
mRenderer.setZoomButtonsVisible(true);
mRenderer.setShowLegend(true);
mRenderer.setLegendTextSize(25);
mRenderer.setShowGridX(true); // this will show the grid in graph
mRenderer.setShowGridY(true);
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setGridColor(Color.BLACK);
mRenderer.setYLabelsColor(0, Color.BLACK);
mRenderer.setXLabelsColor(Color.BLACK);
mRenderer.setBarSpacing(.5);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setXAxisMin(0);
mRenderer.setXAxisMax(itemCount + 1);
mRenderer.setXLabels(0);
mRenderer.setYAxisMin(0);
mRenderer.setYAxisMax(max+1);
//right, top, left, bottom
mRenderer.setMargins(new int[]{30,50,100,10});
mRenderer.setXLabelsPadding(10);
mRenderer.setYLabelsPadding(20);
for(int i = 0 ; i < ItemCD.length; i++){
mRenderer.addXTextLabel(i+1, ItemCD[i]);
}
mRenderer.setZoomEnabled(true, false);
//mRenderer.setClickEnabled(true);
mRenderer.setPanEnabled(true, false); // will fix the chart position
//xMin, xMax, yMin, yMax
mRenderer.setPanLimits(new double[]{0, itemCount + 1, 0, max + 1});
mRenderer.setOrientation(Orientation.VERTICAL);
Intent intent = ChartFactory.getBarChartIntent(context, dataSet,
mRenderer, Type.DEFAULT);
return intent;
}
I have googled examples and tutorials in how to and onClickListeners to a Graph generated by AChartEngine, but most of them involve generating the graph in the same class/activity. However, I noticed that the example that does not have to call an intent and I'm quite puzzled on how that worked.
Also, I had an issue where I set setClickEnabled() to true and it disabled setPanEnabled() from functioning properly.
So, several questions:
How do you add an onClickListener() on individual bars in a graph generated by AChartEngine?
Is there a way to enable setClickEnabled() and have it not conflict setPanEnabled()?
For the first question, see this example, starting at line #157.
For the second question, you can have them both enabled, but when you pan, the setOnClickListener will be running as well.

Categories

Resources