总的来说,AChartEngine提供的api还是很全的,使用起来是很方便的,
添加依赖
compile files('libs/achartengine-1.2.0.jar')
主要代码如下:
public class WeightCurveActivity
extends Activity {
static final String TAG =
WeightCurveActivity.class.getName();
private LinearLayout rootLayout;
private XYMultipleSeriesRenderermRenderer;
private XYMultipleSeriesDataset mDataset = new
XYMultipleSeriesDataset();
private int month;
private Date date;
private ArrayList records;
private double[] xValues;
private double[] yValues;
public void onCreate(Bundle outState)
{
super.onCreate(outState);
setContentView(R.layout.weight_curve);
handleIntent();
initRender();
initData();
initUI();
}
private void handleIntent() {
String
dateString = getIntent().getStringExtra("date");
date = new
Date();
}
private void initRender() {
mRenderer
= buildRenderer();
setChartSettings(0, 31, 30, 120);
}
private void initData() {
month =
new Date().getMonth();
WeightRecordDao dao = new WeightRecordDao(this);
records =
new ArrayList<>();
for (int i
= 1; i < 11; i++) {
WeightRecord wr = new
WeightRecord();
wr.record_on =
i+2;
wr.weight = 60 +
(int)(1+Math.random()*(10-1+1)); //从1到10的int型随数
records.add(wr);
}
Log.e("TAG", "列表个数:" +records.size());
initValues();
}
private void initValues() {
int count
= records.size();
if (count
> 0) {
xValues = new
double[count];
yValues = new
double[count];
for (int i = 0; i < count;
i ++) {
WeightRecord record = records.get(i);
xValues[i] = record.record_on;
yValues[i] = (Math.round(record.weight * 10) /
10.0);
}
setXLabel();
}
}
private void initUI() {
addXYSeries(0);
rootLayout
= (LinearLayout) findViewById(R.id.root);
View view
= ChartFactory.getLineChartView(this, mDataset,
mRenderer);
rootLayout.addView(view);
}
private void setXLabel() {
mRenderer.setXLabels(0); // 设置X轴标签不显示
int length
= xValues.length;
for (int i
= 0; i < length; i++) {
mRenderer.addXTextLabel(i * 3
+ 1, month + "/" + (int)xValues[i]);
}
}
private XYMultipleSeriesRendererbuildRenderer()
{
XYMultipleSeriesRendererrenderer = new
XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(26); // 设置坐标轴字体大小
renderer.setChartTitleTextSize(36); // 设置标题大小
renderer.setLabelsTextSize(20); // 设置标签字体大小
renderer.setLegendTextSize(15); // 设置底部曲线说明字体大小
renderer.setShowGridX(true); // 设置X方向表格显示
renderer.setShowLegend(false); // 设置底部曲线说明显示
renderer.setGridColor(Color.LTGRAY); // 设置表格颜色
renderer.setPointSize(10f);
renderer.setMargins(new int[] { 30, 40, 10, 30 });
renderer.setPanEnabled(true, false); // 设置曲线可滑动
renderer.setApplyBackgroundColor(true); // 设置图表背景
renderer.setBackgroundColor(Color.TRANSPARENT);
renderer.setChartTitle("体重曲线");
renderer.setXTitle("日期");
renderer.setYTitle("体重");
renderer.setXLabelsColor(Color.YELLOW);
renderer.setXLabelsAlign(Paint.Align.CENTER);
renderer.setXLabelsPadding(5);
renderer.setYLabelsColor(0,
Color.GREEN);
renderer.setYLabelsPadding(5);
renderer.setYLabelsAlign(Paint.Align.RIGHT);
renderer.setAxesColor(Color.GRAY); // 设置坐标轴颜色
renderer.setMarginsColor(getResources().getColor(R.color.main_bg_color));
// 设置图表周围颜色
renderer.setLabelsColor(Color.GRAY); // 设置标签颜色
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(getResources().getColor(R.color.stress_font_color));
r.setFillPoints(true);
r.setPointStyle(PointStyle.CIRCLE);
renderer.addSeriesRenderer(r);
r.setDisplayChartValues(true); // 设置显示图表值
r.setDisplayChartValuesDistance(1);
r.setChartValuesTextSize(16);
r.setChartValuesSpacing(10);
r.setHighlighted(true);
return
renderer;
}
private void setChartSettings(double xMin,
double xMax, double yMin,
double yMax) {
mRenderer.setXAxisMin(xMin); // 设置X轴最小值
mRenderer.setXAxisMax(xMax); // 设置X轴最大值
mRenderer.setYAxisMin(yMin); // 设置Y轴最小值
mRenderer.setYAxisMax(yMax); // 设置Y轴最大值
}
private void addXYSeries(int scale) {
XYSeries
series = new XYSeries("", scale);
if
(records.size() > 0) {
int seriesLength =
xValues.length;
for (int k = 0; k <
seriesLength; k++) {
series.add(k * 3 + 1, yValues[k]);
}
}
mDataset.addSeries(series);
}
}