@Override public Intent execute(Context context) { String[] titles = new String[] {"sin + cos"}; List<double[]> x = new ArrayList<double[]>(); List<double[]> values = new ArrayList<double[]>(); int step = 4; int count = 360 / step + 1; x.add(new double[count]); double[] sinValues = new double[count]; values.add(sinValues); for (int i = 0; i < count; i++) { int angle = i * step; x.get(0)[i] = angle; double rAngle = Math.toRadians(angle); sinValues[i] = Math.sinh(rAngle); } int[] colors = new int[] {Color.RED}; PointStyle[] styles = new PointStyle[] {PointStyle.POINT}; XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); setChartSettings( renderer, "Trigonometric functions", "X (in degrees)", "Y", 0, 360, -2, 2, Color.GRAY, Color.LTGRAY); renderer.setXLabels(20); renderer.setYLabels(10); return ChartFactory.getLineChartIntent(context, buildDataset(titles, x, values), renderer); }
private XYMultipleSeriesRenderer getCostsRenderer() { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); int renderCount = 0; // which color to use for the current render for (Calculator curCalculator : calculatorList) { XYSeriesRenderer existingCosts = new XYSeriesRenderer(); existingCosts.setColor(COLOR_LIST[renderCount]); existingCosts.setPointStyle(PointStyle.POINT); existingCosts.setLineWidth(3.0f); renderer.addSeriesRenderer(existingCosts); renderCount = incrementRenderCount(renderCount); XYSeriesRenderer solarCosts = new XYSeriesRenderer(); solarCosts.setColor(COLOR_LIST[renderCount]); solarCosts.setPointStyle(PointStyle.POINT); solarCosts.setLineWidth(3.0f); renderer.addSeriesRenderer(solarCosts); renderCount = incrementRenderCount(renderCount); } renderer.setAxesColor(Color.BLACK); renderer.setLabelsColor(Color.BLACK); renderer.setXLabelsColor(Color.BLACK); renderer.setYLabelsColor(0, Color.BLACK); renderer.setMarginsColor(Color.WHITE); renderer.setYLabels( 16); // Needs to be about double what we want - not sure why...it works as expected on the // other graph - TP renderer.setXTitle("Year"); renderer.setYTitle("Annual Electricity Cost ($)"); renderer.setPanEnabled(false); // don't think this is working as expected renderer.setZoomEnabled(false); // don't think this is working as expected return renderer; }
protected void setChartSettings( XYMultipleSeriesRenderer mXYMultipleSeriesRenderer, String xTitle, String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) { // 有关对图表的渲染可参看api文档 mXYMultipleSeriesRenderer.setChartTitle(title); mXYMultipleSeriesRenderer.setXTitle(xTitle); mXYMultipleSeriesRenderer.setYTitle(yTitle); mXYMultipleSeriesRenderer.setXAxisMin(xMin); mXYMultipleSeriesRenderer.setAxisTitleTextSize(30); mXYMultipleSeriesRenderer.setChartTitleTextSize(50); mXYMultipleSeriesRenderer.setLabelsTextSize(15); mXYMultipleSeriesRenderer.setXAxisMax(xMax); mXYMultipleSeriesRenderer.setYAxisMin(yMin); mXYMultipleSeriesRenderer.setYAxisMax(yMax); mXYMultipleSeriesRenderer.setAxesColor(axesColor); mXYMultipleSeriesRenderer.setLabelsColor(labelsColor); mXYMultipleSeriesRenderer.setShowGrid(true); mXYMultipleSeriesRenderer.setGridColor(Color.GRAY); mXYMultipleSeriesRenderer.setXLabels(20); mXYMultipleSeriesRenderer.setYLabels(10); mXYMultipleSeriesRenderer.setXTitle("time"); mXYMultipleSeriesRenderer.setYLabelsAlign(Align.RIGHT); mXYMultipleSeriesRenderer.setPointSize((float) 5); mXYMultipleSeriesRenderer.setShowLegend(true); mXYMultipleSeriesRenderer.setLegendTextSize(20); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences prefs = getSharedPreferences("theme", 0); switch (prefs.getInt("theme", 0)) { case 0: setTheme(R.style.AppTheme_Blue_Dark); break; case 1: setTheme(R.style.AppTheme_Blue_Light); break; case 2: setTheme(R.style.AppTheme_Green_Dark); break; case 3: setTheme(R.style.AppTheme_Green_Light); break; case 4: setTheme(R.style.AppTheme_Red_Dark); break; case 5: setTheme(R.style.AppTheme_Red_Light); break; case 6: setTheme(R.style.AppTheme_Orange_Dark); break; case 7: setTheme(R.style.AppTheme_Orange_Light); break; case 8: setTheme(R.style.AppTheme_Purple); break; } setContentView(R.layout.activity_graph); // set some properties on the maincal renderer mRenderer.setApplyBackgroundColor(true); mRenderer.setBackgroundColor(Color.BLACK); mRenderer.setAxisTitleTextSize(16); mRenderer.setChartTitleTextSize(0); mRenderer.setLabelsTextSize(15); mRenderer.setLegendTextSize(20); mRenderer.setLegendHeight(22); mRenderer.setPointSize(5f); mRenderer.setAxesColor(Color.BLACK); mRenderer.setXLabels(20); mRenderer.setYLabels(20); mRenderer.setPanEnabled(true); mRenderer.setZoomEnabled(true); mRenderer.setShowGrid(true); mRenderer.setXAxisBold(true); mRenderer.setYAxisBold(true); mRenderer.setZoomButtonsVisible(true); mRenderer.setZoomEnabled(true); }
public void init() { mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00)); // transparent margins mRenderer.setPanEnabled(false, false); mRenderer.setYAxisMax(-40); mRenderer.setYAxisMin(-100); mRenderer.setYLabels(3); mRenderer.setYTitle(LABEL_Y); mRenderer.setXAxisMin(0); mRenderer.setXAxisMax(300); mRenderer.setXLabels(15); mRenderer.setXTitle(LABEL_X); mRenderer.setShowGrid(true); mRenderer.setShowLabels(true); mRenderer.setShowLegend(false); mRenderer.setShowCustomTextGrid(true); }
protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) { renderer.setAxisTitleTextSize(16); renderer.setChartTitleTextSize(20); renderer.setLabelsTextSize(15); renderer.setLegendTextSize(15); renderer.setPointSize(5f); renderer.setYLabels(5); renderer.setMargins(new int[] {30, 15, 30, 15}); int length = colors.length; for (int i = 0; i < length; i++) { XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(colors[i]); r.setPointStyle(styles[i]); renderer.addSeriesRenderer(r); } renderer.setClickEnabled(true); renderer.setSelectableBuffer(100); renderer.setApplyBackgroundColor(true); renderer.setBackgroundColor(Color.argb(100, 50, 50, 50)); renderer.setAxesColor(Color.LTGRAY); renderer.setZoomButtonsVisible(true); renderer.setPointSize(10); renderer.setChartTitle("Fuel Efficiency and Cost"); // mRenderer.setXTitle("Date"); renderer.setShowGrid(true); renderer.setXLabelsAlign(Align.RIGHT); renderer.setYLabelsAlign(Align.LEFT); renderer.setYTitle(cunits, 0); renderer.setLabelsColor(Color.WHITE); renderer.setXLabelsColor(Color.GREEN); renderer.setYLabelsColor(0, colors[0]); renderer.setYLabelsColor(1, colors[1]); renderer.setYTitle(dunits, 1); renderer.setYAxisAlign(Align.RIGHT, 1); renderer.setYLabelsAlign(Align.RIGHT, 1); }
protected void setChartSettings(XYMultipleSeriesRenderer renderer) { double xMin, xMax, yMin = 5, yMax = 40; // 有关对图表的渲染可参看api文档 renderer.setAxisTitleTextSize(16); renderer.setChartTitleTextSize(16); renderer.setLabelsTextSize(15); renderer.setLegendTextSize(15); renderer.setXTitle("时间 (月/日 时:分)"); renderer.setYTitle("温度 (摄氏度)"); renderer.setChartTitle(title); // XY轴的最大/最小值 // renderer.setXAxisMin(xMin); // renderer.setXAxisMax(xMax); renderer.setYAxisMin(yMin); renderer.setYAxisMax(yMax); // 坐标轴颜色 renderer.setAxesColor(Color.RED); // 标签(title、单位)颜色 renderer.setLabelsColor(Color.WHITE); // 网格属性 renderer.setShowGrid(true); renderer.setGridColor(Color.BLACK); // 背景色 不起作用 // renderer.setBackgroundColor(Color.WHITE); // 横纵坐标格数 renderer.setXLabels(5); renderer.setYLabels((int) ((yMax - yMin) / 5)); // Y轴的刻度到Y轴的右边 renderer.setYLabelsAlign(Align.RIGHT); // 折线转折点大小 renderer.setPointSize((float) 7); // 是否显示图例 renderer.setShowLegend(false); // 显示折线转折点值 // renderer.setDisplayChartValues(true); }
@Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); mDataCache = DataCache.getInstance(); mDataset = new XYMultipleSeriesDataset(); mRenderer = new XYMultipleSeriesRenderer(); // Renderer // Basic mRenderer.setMargins(new int[] {100, 150, 30, 100}); mRenderer.setChartTitleTextSize(20); mRenderer.setApplyBackgroundColor(true); mRenderer.setBackgroundColor(0xffE8E8E7); mRenderer.setMarginsColor(0xffE8E8E7); mRenderer.setLegendTextSize(15); mRenderer.setPointSize(5); mRenderer.setShowLegend(true); mRenderer.setClickEnabled(false); // Axes mRenderer.setAxisTitleTextSize(50); mRenderer.setBarSpacing(50); mRenderer.setYTitle("Light"); // mRenderer.setAxesColor(Color.BLACK); // Labels // mRenderer.setLabelsColor(Color.WHITE); mRenderer.setLabelsTextSize(35); mRenderer.setXLabels(0); mRenderer.setYLabels(10); mRenderer.setYAxisMin(0); mRenderer.setYAxisMax(1000); mRenderer.setXLabelsColor(Color.BLACK); mRenderer.setYLabelsColor(0, Color.BLACK); mRenderer.setXLabelsAngle(-45f); mRenderer.setXLabelsAlign(Align.CENTER); mRenderer.setYLabelsAlign(Align.RIGHT); mRenderer.setPanEnabled(false, false); mRenderer.setZoomEnabled(false, 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; }
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); }
@Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); try { elec_thread.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } int k = CH.getNum_of_msg(); // 보여줄 데이터 개수 Log.d("get", "onStart시작"); int seriesLength = 0; double max = 0; recv_packet = new Packet[k]; for (int i = 0; i < k; i++) { recv_packet[i] = CH.get_Packet(i); } Log.d("get", "recv_packet배열 저장"); List<Float[]> values = new ArrayList<Float[]>(); Float[][] a = new Float[4][k]; int[][] c = new int[4][k]; for (int j = 0; j < k; j++) { a[0][j] = Float.parseFloat(recv_packet[j].getData(3)); a[1][j] = Float.parseFloat(recv_packet[j].getData(4)); a[2][j] = Float.parseFloat(recv_packet[j].getData(5)); a[3][j] = Float.parseFloat(recv_packet[j].getData(7)); c[0][j] = (int) (a[0][j] * 10); c[1][j] = (int) (a[1][j] * 10); c[2][j] = (int) (a[2][j] * 10); c[3][j] = (int) (a[3][j] * 10); a[0][j] = ((float) c[0][j] / (float) 10); a[1][j] = ((float) c[1][j] / (float) 10); a[2][j] = ((float) c[2][j] / (float) 10); a[3][j] = ((float) c[3][j] / (float) 10); // a[3][j] = (float) Math.round(Float.parseFloat(recv_packet[j].getData(7))*10000)/10000; // values.add(a);// 이번달 } for (int w = 0; w < 4; w++) { // a[w] = Math.round(a[w]*10) / 10.0; values.add(a[w]); } Log.d("get", "values배열 저장"); XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); renderer.setChartTitle("과거 사용량과의 비교"); renderer.setChartTitleTextSize(50); String[] titles = new String[] {"3달 전", "2달 전", "1달 전", "이번 달"}; int[] colors = new int[] { Color.rgb(255, 90, 217), Color.rgb(54, 255, 255), Color.rgb(255, 255, 72), Color.rgb(83, 255, 76) }; // ////////////////////////////////////////////////////// // renderer.setLegendTextSize(35); int length = values.size(); // 항목갯수 Log.d("get", "legnth : " + length); for (int i = 0; i < length; i++) { SimpleSeriesRenderer r = new SimpleSeriesRenderer(); r.setColor(colors[i]); renderer.addSeriesRenderer(r); } renderer.setXTitle("제품별"); renderer.setYTitle("사용량"); renderer.setAxisTitleTextSize(28); renderer.setMarginsColor(Color.WHITE); renderer.setLabelsTextSize(20); renderer.setLegendHeight(200); renderer.setXAxisMin(0.5); // renderer.setXAxisMax(length + 0.5); // 장비 갯수 +0.5 renderer.setYAxisMin(0); renderer.setLabelsColor(Color.BLACK); renderer.setBackgroundColor(Color.WHITE); // 그래프 위에 값 표시하기 for (int i = 0; i < length; i++) { renderer.getSeriesRendererAt(i).setDisplayChartValues(true); renderer.getSeriesRendererAt(i).setChartValuesTextAlign(Align.RIGHT); renderer.getSeriesRendererAt(i).setChartValuesTextSize(20); } Log.d("get", "그래프위값 표시하기"); renderer.setYLabels(5); // x,y축 정렬 방향 renderer.setXLabelsAlign(Align.CENTER); renderer.setYLabelsAlign(Align.CENTER); renderer.setPanEnabled(true, true); // x,y축 스크롤 여부 on/off renderer.setZoomEnabled(true); // zoom기능 on/off renderer.setZoomRate(1.0f); renderer.setBarSpacing(0.5f); Log.d("get", "xy축 정렬 방향"); XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); for (int i = 0; i < titles.length; i++) { CategorySeries series = new CategorySeries(titles[i]); Float[] v = values.get(i); Log.d("get", "int i = 0; i < titles.length; i++"); seriesLength = v.length; renderer.setXAxisMax(seriesLength + 0.5); for (int q = 0; q < seriesLength; q++) { series.add(v[q]); if (max < v[q]) { max = v[q]; } // Log.d("Test", "series.add : " + v[q]); renderer.setXLabels(seriesLength + 1); } dataset.addSeries(series.toXYSeries()); } Log.d("get", "111111111"); String[] x_name = new String[seriesLength]; for (int b = 0; b < k; b++) { x_name[b] = recv_packet[b].getData(2); } Log.d("get", "222222222"); renderer.setXLabels(0); for (int i = 0; i < seriesLength; i++) { renderer.addXTextLabel(i + 1, x_name[i]); } renderer.setYAxisMax(max + (max * 0.1)); // max 찾아서 넣기 GraphicalView gv = ChartFactory.getBarChartView(this, dataset, renderer, Type.DEFAULT); setContentView(gv); }
// the zephry manager will send RR values to this listener. // RRs are the milliseconds between beats. Example, steady 60 BPM heartbeat sends rr values of // 1000 because there is a full second between beats public void updateChart(int rr) { // we throw out any 0s or absurd values. We have found this tends not to happen with a good // chest strap if ((rr < 1) || (rr > 3000)) return; int pulserate = 60000 / rr; series.add(x, pulserate); x = x + rr; // time is also the accumulation of RR values // Achartengine stuff XYSeriesRenderer renderer = new XYSeriesRenderer(); XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); // Set the right side to current time mRenderer.setXAxisMax(x); // set the left side to one minute earlier 60000 miliseconds mRenderer.setXAxisMin(x - 60000); mRenderer.setYAxisMin(MIN_HEART_RATE); mRenderer.setYAxisMax(MAX_HEART_RATE); mRenderer.setLabelsTextSize(LABELTEXTSIZE); renderer.setFillPoints(true); renderer.setLineWidth(2); renderer.setPointStyle(style); mRenderer.setShowLegend(false); mRenderer.setChartTitle(title); mRenderer.setShowGrid(true); mRenderer.setGridColor(gridcolor); mRenderer.setXLabels(11); mRenderer.setYLabels(5); mRenderer.setAxisTitleTextSize(25); mRenderer.setChartTitleTextSize(30); mRenderer.setLabelsTextSize(20); mRenderer.setLegendTextSize(15); mRenderer.setPointSize(2f); mRenderer.setMargins(new int[] {20, 30, 15, 0}); mRenderer.setYLabelsAlign(Align.RIGHT); mDataset.removeSeries(0); mDataset.addSeries(series); renderer.setColor(linecolor); context = getApplicationContext(); mRenderer.setApplyBackgroundColor(true); mRenderer.setBackgroundColor(bgcolor); mRenderer.addSeriesRenderer(renderer); chartview = ChartFactory.getTimeChartView(context, mDataset, mRenderer, null); chartview.invalidate(); ((TextView) findViewById(R.id.heartratelabel)).setText("HR:" + pulserate); chartview.repaint(); FrameLayout chartlayout = (FrameLayout) findViewById(R.id.chartlayout); chartlayout.removeAllViewsInLayout(); chartlayout.addView( chartview, new FrameLayout.LayoutParams( FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT)); status .checkForClear(); // this needs to be done time to time regularly so statuses are not stuck // on. }