Tuesday, February 18, 2014

AChartEngine click event, after sliding demand point index


Recent projects used in drawing the chart function, visual only okay with this plugin, but encountered the following problem:

After sliding to the left at some point is hidden, just click on a point, the resulting index is not at this point in the array index, what is the solution? Great God help qq 78783606 beg beg for help! Grateful

Directly attached to the code
/ / ====================== Bean ========================= =======
public class Data {

long time;
double value;
public long getTime () {
return time;
}
public void setTime (long time) {
this.time = time;
}
public double getValue () {
return value;
}
public void setValue (double value) {
this.value = value;
}

public Data (long time, double value) {
super ();
this.time = time;
this.value = value;
}

}

/ / ====================== Activity ========================= ===
public class MainActivity extends Activity {

LinearLayout ll;
@ Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
ll = new LinearLayout (this);
initData ();
initChatView ();
setContentView (ll);
}
ArrayList dataList = new ArrayList ();
Random r = new Random ();
long now = System.currentTimeMillis () -240 * 3600 * 1000;
private void initData () {
for (int i = 0; i <50; i + +) {
Data d = new Data (now + r.nextLong (), r.nextInt (1000));
dataList.add (d);
}
}

public void initChatView () {
int size = dataList.size ();

Date [] dates = new Date [size];
final double [] values ​​= new double [size];
double maxy = 0;
for (int i = 0; i . long time = dataList.get (i) getTime ();
. double value = dataList.get (i) getValue ();
dates [i] = new Date (time);
values ​​[i] = value;

if (value> maxy) {
maxy = value;
}
}

XYMultipleSeriesRenderer renderer = buildRenderer ();
setChartSettings (renderer, "title", "date", "value",
. dates [0] getTime (), dates [size - 1] getTime (), -5, maxy + maxy / 5, Color.LTGRAY, Color.LTGRAY);
.renderer.setXLabels (5);
renderer.setYLabels (5);
renderer.setShowGrid (true);
renderer.setXLabelsAlign (Align.CENTER);
renderer.setYLabelsAlign (Align.RIGHT);
final GraphicalView view = ChartFactory.getTimeChartView (this
, BuildDateDataset ("test", dates, values), renderer, "yyyy-MM-dd HH: mm: ss");
/ / Renderer.setZoomButtonsVisible (true);
/ / Renderer.setZoomEnabled (true, true);
renderer.setClickEnabled (true);
renderer.setSelectableBuffer (20);
view.setOnClickListener (new View.OnClickListener () {
public void onClick (View v) {
/ / Handle the click event on the chart

SeriesSelection seriesSelection = view.getCurrentSeriesAndPoint ();
if (seriesSelection! = null) {
System.out.println ("data point index" + seriesSelection.getPointIndex () + "was clicked"
+ "X =" + seriesSelection.getXValue () + ", Y ="
+ SeriesSelection.getValue ());

}
}
});
ll.addView (view);
}


protected XYMultipleSeriesRenderer buildRenderer () {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer ();
setRenderer (renderer, Color.GREEN, PointStyle.CIRCLE);
return renderer;
}


protected void setRenderer (XYMultipleSeriesRenderer renderer, int color, PointStyle style) {
renderer.setAxisTitleTextSize (16);
renderer.setChartTitleTextSize (20);
renderer.setLabelsTextSize (15);
renderer.setLegendTextSize (15);
renderer.setPointSize (5f);
renderer.setMargins (new int [] {20, 30, 15, 20});
XYSeriesRenderer r = new XYSeriesRenderer ();
r.setFillPoints (true);
r.setColor (color);
r.setPointStyle (style);
r.setPointStrokeWidth (10);
renderer.addSeriesRenderer (r);
}


protected void setChartSettings (XYMultipleSeriesRenderer renderer, String title, String xTitle,
String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,
int labelsColor) {
renderer.setChartTitle (title);
renderer.setXTitle (xTitle);
renderer.setYTitle (yTitle);
renderer.setXAxisMin (xMin);
renderer.setXAxisMax (xMax);
renderer.setYAxisMin (yMin);
renderer.setYAxisMax (yMax);
renderer.setAxesColor (axesColor);
renderer.setLabelsColor (labelsColor);
}

protected XYMultipleSeriesDataset buildDateDataset (String title, Date [] xValues,
double [] yValues) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset ();
TimeSeries series = new TimeSeries (title);
int seriesLength = xValues.length;
for (int k = 0; k series.add (xValues ​​[k], yValues ​​[k]);
}
dataset.addSeries (series);
return dataset;
}


}<-! Main posts under Banner (D4) -><-! Posts under the main text (D5) ->

No comments:

Post a Comment