1.首先在布局文件中加入LinearLayout布局,如下:
<LinearLayout android:id="@+id/chart"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:layout_weight="1"
/>
2.写一个类,封装了绘图工具
package com.jinbi.app.utils;
import java.util.Random;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.graphics.Color;
import android.graphics.Paint.Align;
public class DrawableUtil {
/**获取数据
* @return 返回XYMultipleSeriesDataset
* @yData 设置y轴的数据
*/
public static XYMultipleSeriesDataset getBarDemoDataset(double[] yData){
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
final int nr = yData.length;
CategorySeries series = new CategorySeries("Demo series " + 1);
for (int k = 0; k < nr; k++){
series.add(yData[k]);
}
dataset.addSeries(series.toXYSeries());
return dataset;
}
public static XYMultipleSeriesRenderer getBarDemoRenderer(String[] date,double yStart,double yEnd) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(Color. BLUE );
renderer.addSeriesRenderer(r);
r.setPointStyle(PointStyle.CIRCLE);//点的类型是圆形
r.setFillPoints(true);//设置点是否实心
setChartSettings(renderer, date, yStart, yEnd);
return renderer;
}
public static void setChartSettings(XYMultipleSeriesRenderer renderer,String[] dates,double yStart,double yEnd) {
int i = 1;
renderer.setMargins(new int[] { 50, 50, 50, 0 }); //设置图表的外边框(上/左/下/右)
renderer.setApplyBackgroundColor(true); //设置是否显示背景色
renderer.setBackgroundColor(Color.argb(00, 265, 265, 265));//设置背景颜色
renderer.setAxisTitleTextSize(16); //设置轴标题文字的大小
renderer.setChartTitleTextSize(10); //设置整个图表标题文字大小
renderer.setLabelsTextSize(22); //设置刻度显示文字的大小(XY轴都会被设置)
renderer.setLegendTextSize(15); //图例文字大小
renderer.setZoomButtonsVisible(false); //是否显示放大缩小按钮
renderer.setPointSize(5); //设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)
renderer.setXAxisMin(0); //设置X轴的最小值
renderer.setXAxisMax(8); //设置X轴的最大值
renderer.setYAxisMin(yStart); //设置Y轴的最小值
renderer.setYAxisMax(yEnd); //设置Y轴的最大值
renderer.setAxesColor(Color.GREEN); //设置X轴的颜色
renderer.setLabelsColor(Color.GREEN); //设置Y轴的颜色
renderer.setXLabels(6); //设置x轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setYLabels(8); //设置y轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setShowGridY(false); //是否显示Y网格
renderer.setShowGridX(true); //是否显示X方向的网格
renderer.setGridColor(Color.GRAY); //设置网格的颜色
renderer.setXLabelsAlign(Align.CENTER); //刻度线与刻度标注之间的相对位置关系
renderer.setYLabelsAlign(Align.RIGHT); //刻度线与刻度标注之间的相对位置关系
renderer.setZoomButtonsVisible(false); //是否显示放大缩小按钮
renderer.setPanEnabled(false, true); //设置是否允许XY轴方向移动
renderer.setShowLegend(false); //设置是否显示图例
renderer.setMarginsColor(Color.WHITE); // 设置外框颜色穿透背景色
renderer.setXLabelsAngle(-25); // 设置X轴标签倾斜角度(clockwise degree)
renderer.setXLabels(0); // 设置X轴不显示数字(改用我们手动添加的文字标签)
for (String date:dates){
renderer.addTextLabel(i, date); //修改X轴显示坐标
i++;
}
}
}
3.在Activity中加入代码,显示出控件
XYMultipleSeriesRenderer renderer = DrawableUtil.getBarDemoRenderer(date,yStart,yEnd);
layout = (LinearLayout) findViewById(R.id.chart); //绑定控件
layout.removeAllViews(); //这个方法是用来辅助实现刷新功能
mChartView = ChartFactory.getTimeChartView(this, DrawableUtil.getBarDemoDataset(yData), renderer, "MM/dd");
layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
这样就可以在LinearLayout控件中将图标显示出来了。当然还有些细节需要自己处理!
4.补充:
1、增加需求:显示的点上加文字
renderer.setDisplayChartValues(true); //显示点的坐标值
XYSeriesRenderer.setChartValuesTextSize(25); //设置点的文字大小