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); }
@Override protected void onResume() { super.onResume(); if (mChartView == null) { LinearLayout layout = (LinearLayout) findViewById(R.id.chart); layout.setVisibility(View.INVISIBLE); mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer); // enable the chart click events mRenderer.setClickEnabled(true); mRenderer.setSelectableBuffer(10); mChartView.setOnClickListener( new View.OnClickListener() { public void onClick(View v) {} }); layout.addView( mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } else { mChartView.repaint(); } }
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 AChart() { // mDataset = new XYMultipleSeriesDataset(); // mRenderer = new XYMultipleSeriesRenderer(); // mCurrentRenderer = new XYSeriesRenderer(); mRenderer.setApplyBackgroundColor(true); // 设置是否显示背景色 mRenderer.setBackgroundColor(Color.argb(50, 214, 241, 255)); // 设置背景色 mRenderer.setAxisTitleTextSize(32); // 设置轴标题文字的大小 mRenderer.setAxesColor(Color.BLACK); // 坐标轴颜色 mRenderer.setChartTitleTextSize(32); // ?设置整个图表标题文字大小 mRenderer.setChartTitle(appState.userID); mRenderer.setXLabelsColor(Color.BLACK); // 设置X轴刻度颜色 mRenderer.setYLabelsColor(0, Color.BLACK); // 设置Y轴刻度颜色 mRenderer.setLabelsTextSize(32); // 设置刻度显示文字的大小(XY轴都会被设置) mRenderer.setLegendTextSize(32); // 图例文字大小 mRenderer.setMargins(new int[] {30, 30, 50, 10}); // 设置图表的外边框(上/左/下/右) mRenderer.setMarginsColor(Color.argb(50, 214, 241, 255)); // 边框颜色 mRenderer.setZoomButtonsVisible(false); // 是否显示放大缩小按钮 mRenderer.setShowGrid(true); // 显示网格 mRenderer.setPointSize(10); // 设置点的大小(图上显示的点的大小和图例中点的大小都会被设置) String seriesTitle = "I-Sleep"; if (mDataset.getSeriesCount() > 0) { mDataset.removeSeries(0); mRenderer.removeAllRenderers(); } XYSeries series = new XYSeries(seriesTitle); // 定义XYSeries mDataset.addSeries(series); // 在XYMultipleSeriesDataset中添加XYSeries mCurrentSeries = series; // 设置当前需要操作的XYSeries \ addPoint(); XYSeriesRenderer renderer = new XYSeriesRenderer(); // 定义XYSeriesRenderer mRenderer.addSeriesRenderer(renderer); // 将单个XYSeriesRenderer增加到XYMultipleSeriesRenderer renderer.setPointStyle(PointStyle.CIRCLE); // 点的类型是圆形 renderer.setFillPoints(true); // 设置点是否实心 renderer.setColor(Color.BLUE); // 折线颜色 mCurrentRenderer = renderer; // if (mChartView == null) { if (layout != null) { layout.removeAllViews(); } layout = (LinearLayout) getActivity().findViewById(R.id.chart); mChartView = ChartFactory.getLineChartView(getActivity().getApplicationContext(), mDataset, mRenderer); mRenderer.setClickEnabled(true); // 设置图表是否允许点击 mRenderer.setSelectableBuffer(100); // 设置点的缓冲半径值(在某点附件点击时,多大范围内都算点击这个点) mChartView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // 这段代码处理点击一个点后,获得所点击的点在哪个序列中以及点的坐标. // -->start SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); double[] xy = mChartView.toRealPoint(0); if (seriesSelection == null) { // Toast.makeText(getActivity().getApplicationContext(), "No chart // element was clicked", Toast.LENGTH_SHORT).show(); } else { // Toast.makeText(getActivity().getApplicationContext(), // "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.LENGTH_SHORT).show(); // tv_graphdata.setText("X = " + // String.valueOf(seriesSelection.getXValue()) + // " Y = " + String.valueOf(seriesSelection.getValue())); tv_graphdata.setText( appState.userID + " " + appState.userName + " " + "Duration:" + duration[(int) seriesSelection.getXValue() - 1] + "hours\n" + "Starttime:" + starttime[(int) seriesSelection.getXValue() - 1] + "\n" + "Endtime:" + endtime[(int) seriesSelection.getXValue() - 1]); tv_graphdata.setTextSize(16); // 播放音频 if (!"".equals(recfile[(int) seriesSelection.getXValue() - 1])) { playRecWithSysPlayer(recfile[(int) seriesSelection.getXValue() - 1]); } else { Toast.makeText(getActivity(), "There's no record.", Toast.LENGTH_LONG).show(); } } // -->end } }); mChartView.setOnLongClickListener( new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); if (seriesSelection == null) { // Toast.makeText(XYChartBuilder.this, "No chart element was long // pressed",Toast.LENGTH_SHORT); return false; // no chart element was long pressed, so let something // else handle the event } else { // Toast.makeText(XYChartBuilder.this, "Chart element in series index " // + seriesSelection.getSeriesIndex() + " data point index " // + seriesSelection.getPointIndex() + " was long pressed", // Toast.LENGTH_SHORT); return true; // the element was long pressed - the event has been // handled } } }); // 这段代码处理放大缩小 // -->start mChartView.addZoomListener( new ZoomListener() { public void zoomApplied(ZoomEvent e) { String type = "out"; if (e.isZoomIn()) { type = "in"; } System.out.println("Zoom " + type + " rate " + e.getZoomRate()); } public void zoomReset() { System.out.println("Reset"); } }, true, true); // -->end // 设置拖动图表时后台打印出图表坐标的最大最小值. mChartView.addPanListener( new PanListener() { public void panApplied() { System.out.println( "New X range=[" + mRenderer.getXAxisMin() + ", " + mRenderer.getXAxisMax() + "], Y range=[" + mRenderer.getYAxisMax() + ", " + mRenderer.getYAxisMax() + "]"); } }); layout.addView( mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); boolean enabled = mDataset.getSeriesCount() > 0; // } else { // mChartView.repaint(); // } }