前面几篇博客中都是调用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.graphics.Bitmap.CompressFormat;
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;
@Override
protected 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");
}
@Override
protected 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);
}
@Override
protected 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);//定义XYSeries
mDataset.addSeries(series);//在XYMultipleSeriesDataset中添加XYSeries
mCurrentSeries = series;//设置当前需要操作的XYSeries
XYSeriesRenderer renderer = new XYSeriesRenderer();//定义XYSeriesRenderer
mRenderer.addSeriesRenderer(renderer);//将单个XYSeriesRenderer增加到XYMultipleSeriesRenderer
renderer.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) {
// TODO
mX.requestFocus();
return;
}
try {
y = Double.parseDouble(mY.getText().toString());
} catch (NumberFormatException e) {
// TODO
mY.requestFocus();
return;
}
mCurrentSeries.add(x, y);
mX.setText("");
mY.setText("");
mX.requestFocus();
if (mChartView != null) {
mChartView.repaint();//重画图表
}
//生成图片保存,注释掉下面的代码不影响图表的生成.
//-->start
Bitmap bitmap = mChartView.toBitmap();
try {
File file = new File(Environment.getExternalStorageDirectory(), "test" + index++ + ".png");
FileOutputStream output = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, output);
} catch (Exception e) {
e.printStackTrace();
}
//-->end
}
});
}
@Override
protected 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() {
@Override
public void onClick(View v) {
//这段代码处理点击一个点后,获得所点击的点在哪个序列中以及点的坐标.
//-->start
SeriesSelection 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() {
@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.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(一) -简介
http://blog.csdn.net/lk_blog/article/details/7645509
安卓图表引擎AChartEngine(二) -示例源码概述和分析
http://blog.csdn.net/lk_blog/article/details/7642751
安卓图表引擎AChartEngine(三) -示例源码折线图、饼图和柱状图
http://blog.csdn.net/lk_blog/article/details/7645668
安卓图表引擎AChartEngine(四) -源码示例嵌入Acitivity中的折线图
http://blog.csdn.net/lk_blog/article/details/7645665
安卓图表引擎AChartEngine(五) -Render和Dataset参数介绍
http://blog.csdn.net/lk_blog/article/details/7645661
安卓图表引擎AChartEngine(六) -框架源码结构图
http://blog.csdn.net/lk_blog/article/details/7645671
分享到:
相关推荐
安卓图表引擎AChartEngine(六)-框架源码结构图.pdf
AChartEngine 是一个安卓系统上制作图表的框架,使用简单,功能强大,目前它支持如下的图表类型:line chart (折线图),area chart (面积图;分区图,对比图),scatter chart ( 散点图),time chart (时间图;进度表),bar...
安卓图表框架achartengine-1.0.0 支持以下类型的图表: • line chart (折线图) • area chart (面积图;分区图,对比图) • scatter chart ( 散点图) • time chart (时间图;进度表) • bar chart (条形图;柱状图)...
android图表绘制工具,功能非常强大,几乎涵盖了所有的图表种类。 这是目前最新的版本:1.1.0 包含了3个文件: achartengine-1.1.0.jar, achartengine-1.1.0-demo-source.zip, achartengine-1.1.0-javadocs.zip ...
资源里包括Android图表引擎achartengine 的jar包、示例代码及API文档,各种二维三维图表开发利器
Android 使用AChartEngine画折线图统计图
achartengine表格源码,源码中的注释大部分都被我详细中文翻译过,方便大家阅读
achartengine1.0.0到1.2.0jar包
AChartEngine 是一个安卓系统上制作图表的框架 目前为止AchartEngine最新版是1.1.0版本。
achartengine 1.2.0版本的下载,可以实现饼图,折线图,柱状图等
NULL 博文链接:https://iaiai.iteye.com/blog/1783716
achartengine-1.0.0-javadocs 画图API Android文档
achartengine-1.1.0-javadocs.zip 开发文档
ChartEngine支持的图表类型:折线图、区域图、散点图、时间图、柱状图、饼状图、气泡式图表、环形图、高低交替图等。 以上每种图表都可以包含多个序列, 可以将X轴以水平或垂直的形式显示,也支持很多自定义的特性。...
achartengine-1.1.0.jar 用于在android上绘制曲线图和趋势图 它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表
AChartEngine是为android应用而设计的绘图工具库。目前该库的最新稳定版本是0.7,支持绘制以下类型的图表: ?line chart ?area chart ?scatter chart ?time chart ?bar chart ?pie chart ?bubble chart ?doughnut ...
本项目是一个有大量中文注释版的AChartEngine图标引擎源码,AChartEngine 是一个安卓系统上制作图表的框架,目前它支持如下的图表类型:range (high-low) bar chart (范围条形图)、dial chart / gauge (拨号盘/压力表...
里面有曲线图 折线图 双曲线图 柱形图 饼图,在achartengine 的基础上 更改了一些颜色 .zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
本项目是一个有大量中文注释版的AChartEngine图标引擎源码,AChartEngine 是一个安卓系统上制作图表的框架,目前它支持如下的图表类型:range (high-low) bar chart (范围条形图)、dial chart / gauge (拨号盘/压力表...