@Override protected void doForeGround() throws Exception { xValues.clear(); yValues.clear(); if (returnList != null) { Log.e(TAG, "returnList.size()=" + returnList.size()); if (returnList.size() > 0) { getValues(returnList); } else { xValues.add(new double[] {1, 2, 3, 4, 5, 6}); yValues.add(new double[] {0, 0, 0, 0, 0, 0}); Log.e(TAG, "returnList.size()=0"); ToastUtil.show(mContext, "无数据!"); // return; } } else { xValues.add(new double[] {1, 2, 3, 4, 5, 6}); yValues.add(new double[] {0, 0, 0, 0, 0, 0}); Log.e(TAG, "returnList==null"); ToastUtil.show(mContext, "网络连接异常!"); // return; } double max = AppUtil.getMax(yValues); double xLimits = returnList.size(); Log.d(TAG, "max=" + max); double maxPlus = max * 0.1; mRenderer.setYAxisMax(max + maxPlus); mRenderer.setPanLimits(new double[] {0, xLimits + 0.5, 0, mRenderer.getYAxisMax()}); Log.e(TAG, "mRenderer.isClickEnabled()=" + mRenderer.isClickEnabled()); initMultipleBar(xValues, yValues); Log.d(TAG, "mRenderer.getYAxisMax()=" + mRenderer.getYAxisMax()); // mRenderer.setSelectableBuffer(35); // mRenderer.setClickEnabled(true); mChartView.repaint(); mChartView.invalidate(); /* * mChartView.setOnTouchListener(new OnTouchListener() { * * @Override public boolean onTouch(View v, MotionEvent event) { // TODO * Auto-generated method stub return false; } }); */ }
/** * Executes the chart demo. * * @param context the context * @return the built intent */ public Intent execute(Context context, Child aChild) { Cursor c; List<double[]> x = new ArrayList<double[]>(); List<double[]> values = new ArrayList<double[]>(); SQLiteDatabase db = new DatabaseOpenHelper(context).getReadableDatabase(); c = db.query( "bmichart", new String[] {"day", "P99", "P01", "P50"}, null, null, null, null, null); int factor = 5; double[] p99 = new double[(c.getCount() / factor) + 1]; double[] p0 = new double[(c.getCount() / factor) + 1]; double[] p50 = new double[(c.getCount() / factor) + 1]; double[] days = new double[(c.getCount() / factor) + 1]; double[] bmiData = new double[c.getCount() / factor + 1]; c.moveToFirst(); int i = 0; int temp; do { if (i % factor == 0) { temp = i / factor; p99[temp] = c.getDouble(1); p0[temp] = c.getDouble(2); p50[temp] = c.getDouble(3); days[temp] = i; } i++; } while (c.moveToNext()); c.close(); // initializing height to -5 for (i = 0; i < bmiData.length; i++) { bmiData[i] = -5; } c = db.query( aChild.getDataTableName(), new String[] {"day", "bmi"}, null, null, null, null, null); i = 0; String[] titles = new String[] {"P99", "P0", "P50", "BMI"}; int[] colors = new int[] {Color.CYAN, Color.GREEN, Color.RED, Color.BLUE}; PointStyle[] styles = new PointStyle[] {PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, PointStyle.CIRCLE}; if (c.moveToFirst()) { do { temp = (int) (c.getDouble(0) / factor); bmiData[temp] = c.getDouble(1); i++; } while (c.moveToNext()); values.add(bmiData); } else { titles = new String[] {"P99", "P0", "P50"}; colors = new int[] {Color.CYAN, Color.GREEN, Color.RED}; styles = new PointStyle[] {PointStyle.POINT, PointStyle.POINT, PointStyle.POINT}; } for (int v = 0; v < titles.length; v++) { x.add(days); } values.add(p99); values.add(p0); values.add(p50); XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); int length = renderer.getSeriesRendererCount(); for (i = 0; i < length; i++) { ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true); } setChartSettings( renderer, "BMI Day Chart", "Days", "BMI", 0, 1000, 0, 125, Color.LTGRAY, Color.LTGRAY); renderer.setXLabels(12); renderer.setYLabels(10); renderer.setShowGrid(true); renderer.setXLabelsAlign(Align.RIGHT); renderer.setYLabelsAlign(Align.RIGHT); 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, aChild.getName()); c.close(); db.close(); return intent; }
/** * Executes the chart demo. * * @param context the context * @return the built intent */ public Intent execute(Context context) { String[] titles = new String[] {"Crete Air Temperature", "Skiathos Air Temperature"}; 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, 11, 12}); } 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, 17.2, 13.9}); values.add(new double[] {9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10}); int[] colors = new int[] {Color.GREEN, Color.rgb(200, 150, 0)}; PointStyle[] styles = new PointStyle[] {PointStyle.CIRCLE, PointStyle.DIAMOND}; XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); renderer.setPointSize(5.5f); int length = renderer.getSeriesRendererCount(); for (int i = 0; i < length; i++) { XYSeriesRenderer r = (XYSeriesRenderer) renderer.getSeriesRendererAt(i); r.setLineWidth(5); r.setFillPoints(true); } setChartSettings( renderer, "Weather data", "Month", "Temperature", 0.5, 12.5, 0, 40, Color.LTGRAY, Color.LTGRAY); renderer.setXLabels(12); renderer.setYLabels(10); renderer.setShowGrid(true); renderer.setXLabelsAlign(Align.RIGHT); renderer.setYLabelsAlign(Align.RIGHT); renderer.setZoomButtonsVisible(true); renderer.setPanLimits(new double[] {-10, 20, -10, 40}); renderer.setZoomLimits(new double[] {-10, 20, -10, 40}); XYValueSeries sunSeries = new XYValueSeries("Sunshine hours"); sunSeries.add(1, 35, 4.3); sunSeries.add(2, 35, 4.9); sunSeries.add(3, 35, 5.9); sunSeries.add(4, 35, 8.8); sunSeries.add(5, 35, 10.8); sunSeries.add(6, 35, 11.9); sunSeries.add(7, 35, 13.6); sunSeries.add(8, 35, 12.8); sunSeries.add(9, 35, 11.4); sunSeries.add(10, 35, 9.5); sunSeries.add(11, 35, 7.5); sunSeries.add(12, 35, 5.5); XYSeriesRenderer lightRenderer = new XYSeriesRenderer(); lightRenderer.setColor(Color.YELLOW); XYSeries waterSeries = new XYSeries("Water Temperature"); waterSeries.add(1, 16); waterSeries.add(2, 15); waterSeries.add(3, 16); waterSeries.add(4, 17); waterSeries.add(5, 20); waterSeries.add(6, 23); waterSeries.add(7, 25); waterSeries.add(8, 25.5); waterSeries.add(9, 26.5); waterSeries.add(10, 24); waterSeries.add(11, 22); waterSeries.add(12, 18); renderer.setBarSpacing(0.5); XYSeriesRenderer waterRenderer = new XYSeriesRenderer(); waterRenderer.setColor(Color.argb(250, 0, 210, 250)); XYMultipleSeriesDataset dataset = buildDataset(titles, x, values); dataset.addSeries(0, sunSeries); dataset.addSeries(0, waterSeries); renderer.addSeriesRenderer(0, lightRenderer); renderer.addSeriesRenderer(0, waterRenderer); waterRenderer.setDisplayChartValues(true); waterRenderer.setChartValuesTextSize(10); String[] types = new String[] {BarChart.TYPE, BubbleChart.TYPE, LineChart.TYPE, CubicLineChart.TYPE}; Intent intent = ChartFactory.getCombinedXYChartIntent( context, dataset, renderer, types, "Weather parameters"); return intent; }
private void openChart() { String[] chartTitles; chartTitles = new String[] {"Total"}; List<double[]> values = new ArrayList<double[]>(); values.add(mStatsDataDaysList.getDataDoubleArray()); int totalXlength = 0; XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); List<double[]> xAxisValues = new ArrayList<double[]>(); xAxisValues.add(mStatsDataDaysList.getXDoubleArray()); for (int i = 0; i < chartTitles.length; i++) { XYSeries series = new XYSeries(chartTitles[i]); double[] xV = xAxisValues.get(i); double[] yV = values.get(i); int seriesLength = xV.length; for (int k = 0; k < seriesLength; k++) { System.out.println("LOG X is " + xV[k] + " y is " + yV[k]); series.add(xV[k] - 1, yV[k]); } dataset.addSeries(series); } XYSeriesRenderer incomeRenderer = new XYSeriesRenderer(); incomeRenderer.setColor(Color.WHITE); incomeRenderer.setPointStyle(PointStyle.CIRCLE); incomeRenderer.setFillPoints(true); incomeRenderer.setDisplayChartValues(true); incomeRenderer.setDisplayChartValuesDistance(15); incomeRenderer.setDisplayBoundingPoints(false); // for hiding the series when we scroll // Creating a XYMultipleSeriesRenderer to customize the whole chart XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(); multiRenderer.setChartTitle(getString(R.string.my_mined_km_history)); multiRenderer.setXTitle(getString(R.string.days)); multiRenderer.setYTitle(getString(R.string.km)); multiRenderer.setZoomButtonsVisible(true); multiRenderer.setBackgroundColor(0xf7f7f7); multiRenderer.setMarginsColor(0xf7f7f7); multiRenderer.setMargins(new int[] {50, 60, 60, 30}); multiRenderer.setXLabelsAlign(Align.CENTER); multiRenderer.setYLabelsAlign(Align.RIGHT); multiRenderer.setPanEnabled(true, false); // scroll only x axis so true multiRenderer.setZoomEnabled(ZOOM_X, false); multiRenderer.setPointSize(8); // increase the width of point size multiRenderer.setXLabelsPadding(10); if (Utils.getScreenDendity(this) > DisplayMetrics.DENSITY_HIGH) { multiRenderer.setAxisTitleTextSize(20); multiRenderer.setChartTitleTextSize(25); multiRenderer.setLabelsTextSize(20); multiRenderer.setPointSize(8); incomeRenderer.setLineWidth(4); incomeRenderer.setChartValuesTextSize(20); } else { multiRenderer.setAxisTitleTextSize(12); multiRenderer.setChartTitleTextSize(18); multiRenderer.setLabelsTextSize(12); multiRenderer.setPointSize(5); incomeRenderer.setLineWidth(2); incomeRenderer.setChartValuesTextSize(15); } xyValues = new LinkedHashMap<Integer, String>(); for (int i = 0; i < chartTitles.length; i++) { double[] xV = xAxisValues.get(i); totalXlength = xV.length; System.out.println("LOG len is " + totalXlength); for (int j = 0; j < totalXlength; j++) { multiRenderer.addXTextLabel(j + 1, Utils.addDays(xV[j], mInitialDateUser)); xyValues.put(j + 1, Utils.addDays(xV[j], mInitialDateUser)); } } multiRenderer.setXLabels(0); multiRenderer.setShowAxes(false); multiRenderer.setXAxisMin(totalXlength - 5); multiRenderer.setXAxisMax(totalXlength + 1); if (totalXlength <= X_AXIS_MAX) { multiRenderer.setXAxisMin(0); multiRenderer.setXAxisMax(totalXlength); } multiRenderer.setPanEnabled(true); multiRenderer.setPanLimits(new double[] {0, totalXlength + 1, 0, 0}); multiRenderer.setYAxisMin(Utils.getMinValueFromList(values)); multiRenderer.setYAxisMax(Utils.getMaxValueFromList(values)); multiRenderer.setAxesColor(Color.GRAY); multiRenderer.setLabelsColor(Color.WHITE); multiRenderer.addSeriesRenderer(incomeRenderer); // Creating a Time Chart mChartView2 = (GraphicalView) ChartFactory.getTimeChartView(getBaseContext(), dataset, multiRenderer, "dd-MMM-yyyy"); multiRenderer.setClickEnabled(true); multiRenderer.setSelectableBuffer(10); // Setting a click event listener for the graph mChartView2.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { SeriesSelection seriesSelection = mChartView2.getCurrentSeriesAndPoint(); double[] xy = mChartView2.toRealPoint(0); if (seriesSelection != null) { // debug Log.d("Punto", seriesSelection.getXValue() + ", " + seriesSelection.getValue()); // debug Log.d( "Chart point", "Chart element in series index " + seriesSelection.getSeriesIndex() + " data point index " + seriesSelection.getPointIndex() + " was clicked" + " closest point value X=" + seriesSelection.getXValue() + ", Y=" + seriesSelection.getValue() + " clicked point value X=" + (float) xy[0] + ", Y=" + (float) xy[1]); Toast.makeText( getBaseContext(), "" + xyValues.get((int) seriesSelection.getXValue()) + " , " + seriesSelection.getValue() + " " + getString(R.string.km), Toast.LENGTH_SHORT) .show(); } } }); // Adding the Line Chart to the LinearLayout mLayoutChart2.addView(mChartView2); }
public void drawHRLayout(double[] myHRs, Date[] myDates) { String[] titles = new String[] {"FitFormula User"}; List<Date[]> dates = new ArrayList<Date[]>(); List<double[]> values = new ArrayList<double[]>(); for (int i = 0; i < titles.length; i++) { dates.add(myDates); values.add(myHRs); } int[] colors = new int[] {Color.YELLOW}; PointStyle[] styles = new PointStyle[] {PointStyle.CIRCLE}; XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); int length = renderer.getSeriesRendererCount(); for (int i = 0; i < length; i++) { ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true); } double hrMin = getMinValue(myHRs); double hrMax = getMaxValue(myHRs); setChartSettings( renderer, "Resting Heart Rate", "Date", "BPM", dates.get(0)[0].getTime(), dates.get(0)[myDates.length - 1].getTime(), hrMin - hrMin * 0.20, hrMax + hrMax * 0.20, Color.LTGRAY, Color.LTGRAY); renderer.setXLabels(myDates.length - 1); renderer.setYLabels(8); renderer.setShowGrid(true); renderer.setXLabelsAlign(Align.RIGHT); renderer.setYLabelsAlign(Align.RIGHT); renderer.setZoomButtonsVisible(false); renderer.setZoomEnabled(false, false); renderer.setPanEnabled(true, false); renderer.setPanLimits(new double[] {0, myDates.length - 1, 0, hrMax}); // minX, maxX, minY, maxY // renderer.setZoomLimits(new double[] { 0, 20, 60, 120 }); mRelative.removeAllViews(); titleText.setText( Html.fromHtml("<br><b><u><big>My Resting Heart Rate History</big></u></b><br>")); titleText.setId(1); RelativeLayout.LayoutParams relParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); relParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); relParams.addRule(RelativeLayout.CENTER_HORIZONTAL); mRelative.addView(titleText, relParams); // Add the view! chartView = ChartFactory.getTimeChartView( context, buildDateDataset(titles, dates, values), renderer, "MM/dd/yyyy"); chartView.setId(2); DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int height = displaymetrics.heightPixels; int width = displaymetrics.widthPixels; int chartSize = (int) (width * 0.9); relParams = new RelativeLayout.LayoutParams(width, chartSize); relParams.addRule(RelativeLayout.BELOW, titleText.getId()); relParams.addRule(RelativeLayout.CENTER_HORIZONTAL); mRelative.addView(chartView, relParams); hrButton = new Button(this); hrButton.setId(3); hrButton.setText("Measure Resting Heart Rate"); // hrButton.setWidth(width); hrButton.setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { Intent i = new Intent(HcHeartRate.this, FitTestHR.class); i.putExtra("nextactivity", "HcHeartRate"); // Telling HR Class what is next activity getParent().startActivityForResult(i, HCHEARTRATE_REQUEST_CODE); } }); relParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); relParams.addRule(RelativeLayout.BELOW, chartView.getId()); relParams.addRule(RelativeLayout.CENTER_HORIZONTAL); mRelative.addView(hrButton, relParams); }