糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图

安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图

时间:2022-04-10 07:06:40

相关推荐

安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图

前面几篇博客中都是调用ChartFactory.get***Intent()方法,本节讲的内容调用ChartFactory.get***View()方法,这个方法调用的结果可以嵌入到任何一个Activity中,作为Activity的一部分。

XYChartBuilder.java(源码分析见注释)

package org.achartengine.chartdemo.demo.chart;import java.io.File;import java.io.FileOutputStream;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chart.PointStyle;import org.achartengine.chartdemo.demo.R;import org.achartengine.model.SeriesSelection;import org.achartengine.model.XYMultipleSeriesDataset;import org.achartengine.model.XYSeries;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;import org.achartengine.tools.PanListener;import org.achartengine.tools.ZoomEvent;import org.achartengine.tools.ZoomListener;import android.app.Activity;import android.graphics.Bitmap;import android.pressFormat;import android.graphics.Color;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;public class XYChartBuilder extends Activity {public static final String TYPE = "type";private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();private XYSeries mCurrentSeries;private XYSeriesRenderer mCurrentRenderer;private String mDateFormat;private Button mNewSeries;private Button mAdd;private EditText mX;private EditText mY;private GraphicalView mChartView;private int index = 0;@Overrideprotected void onRestoreInstanceState(Bundle savedState) {super.onRestoreInstanceState(savedState);mDataset = (XYMultipleSeriesDataset) savedState.getSerializable("dataset");mRenderer = (XYMultipleSeriesRenderer) savedState.getSerializable("renderer");mCurrentSeries = (XYSeries) savedState.getSerializable("current_series");mCurrentRenderer = (XYSeriesRenderer) savedState.getSerializable("current_renderer");mDateFormat = savedState.getString("date_format");}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putSerializable("dataset", mDataset);outState.putSerializable("renderer", mRenderer);outState.putSerializable("current_series", mCurrentSeries);outState.putSerializable("current_renderer", mCurrentRenderer);outState.putString("date_format", mDateFormat);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.xy_chart);mX = (EditText) findViewById(R.id.xValue);mY = (EditText) findViewById(R.id.yValue);mRenderer.setApplyBackgroundColor(true);//设置是否显示背景色mRenderer.setBackgroundColor(Color.argb(100, 50, 50, 50));//设置背景色mRenderer.setAxisTitleTextSize(16); //设置轴标题文字的大小mRenderer.setChartTitleTextSize(20);//?设置整个图表标题文字大小mRenderer.setLabelsTextSize(15);//设置刻度显示文字的大小(XY轴都会被设置)mRenderer.setLegendTextSize(15);//图例文字大小mRenderer.setMargins(new int[] { 30, 70, 0, 10 });//设置图表的外边框(上/左/下/右)mRenderer.setZoomButtonsVisible(true);//是否显示放大缩小按钮mRenderer.setPointSize(10);//设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)mAdd = (Button) findViewById(R.id.add);mNewSeries = (Button) findViewById(R.id.new_series);mNewSeries.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {String seriesTitle = "Series " + (mDataset.getSeriesCount() + 1);//图例 XYSeries series = new XYSeries(seriesTitle);//定义XYSeriesmDataset.addSeries(series);//在XYMultipleSeriesDataset中添加XYSeriesmCurrentSeries = series;//设置当前需要操作的XYSeriesXYSeriesRenderer renderer = new XYSeriesRenderer();//定义XYSeriesRenderermRenderer.addSeriesRenderer(renderer);//将单个XYSeriesRenderer增加到XYMultipleSeriesRendererrenderer.setPointStyle(PointStyle.CIRCLE);//点的类型是圆形renderer.setFillPoints(true);//设置点是否实心mCurrentRenderer = renderer;setSeriesEnabled(true);}});//增加一个点后重画图mAdd.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {double x = 0;double y = 0;try {x = Double.parseDouble(mX.getText().toString());} catch (NumberFormatException e) {// TODOmX.requestFocus();return;}try {y = Double.parseDouble(mY.getText().toString());} catch (NumberFormatException e) {// TODOmY.requestFocus();return;}mCurrentSeries.add(x, y);mX.setText("");mY.setText("");mX.requestFocus();if (mChartView != null) {mChartView.repaint();//重画图表}//生成图片保存,注释掉下面的代码不影响图表的生成.//-->startBitmap bitmap = mChartView.toBitmap();try {File file = new File(Environment.getExternalStorageDirectory(), "test" + index++ + ".png");FileOutputStream output = new FileOutputStream(file);press(CompressFormat.PNG, 100, output);} catch (Exception e) {e.printStackTrace();}//-->end}});}@Overrideprotected void onResume() {super.onResume();if (mChartView == null) {LinearLayout layout = (LinearLayout) findViewById(R.id.chart);mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);mRenderer.setClickEnabled(true);//设置图表是否允许点击mRenderer.setSelectableBuffer(100);//设置点的缓冲半径值(在某点附件点击时,多大范围内都算点击这个点)mChartView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//这段代码处理点击一个点后,获得所点击的点在哪个序列中以及点的坐标.//-->startSeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();double[] xy = mChartView.toRealPoint(0);if (seriesSelection == null) {Toast.makeText(XYChartBuilder.this, "No chart element was clicked", Toast.LENGTH_SHORT).show();} else {Toast.makeText(XYChartBuilder.this,"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();}//-->end}});mChartView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic 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}}});//这段代码处理放大缩小//-->startmChartView.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.FILL_PARENT,LayoutParams.FILL_PARENT));boolean enabled = mDataset.getSeriesCount() > 0;setSeriesEnabled(enabled);} else {mChartView.repaint();}}private void setSeriesEnabled(boolean enabled) {mX.setEnabled(enabled);mY.setEnabled(enabled);mAdd.setEnabled(enabled);}}

安卓图表引擎AChartEngine(一) -简介

/lk_blog/article/details/7645509

安卓图表引擎AChartEngine(二) -示例源码概述和分析

/lk_blog/article/details/7642751

安卓图表引擎AChartEngine(三) -示例源码折线图、饼图和柱状图

/lk_blog/article/details/7645668

安卓图表引擎AChartEngine(四) -源码示例嵌入Acitivity中的折线图

/lk_blog/article/details/7645665

安卓图表引擎AChartEngine(五) -Render和Dataset参数介绍

/lk_blog/article/details/7645661

安卓图表引擎AChartEngine(六) -框架源码结构图

/lk_blog/article/details/7645671

如果觉得《安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。