Android 开源柱状图分析实现

浏览:
字体:
发布时间:2013-12-09 23:23:37
来源:

在平时开发中柱状形状偶尔会有项目需求,由于又一次开发需要,去找开源的组件都不好用,要不调用很不方便,要不它们类库太笨重,下面介绍一个轻巧方便控件,原理就是用View 重新绘画一个柱状图形控件,并适配所有屏幕。

 

/

 

demo实现后效果图如上

 

1. 导入DisplayView(简称SDK)

下载最新版sdk的zip包,解压将其中的download释放到本地目录,Eclipse用户右键您的工程根目录,选择Properties -> Java Build Path -> Libraries, 然后点击 Add External JARs... 选择指向download 的路径,点击OK,即导入成功。
下载最新版SDK的zip包,将其中的libs 文件夹合并到本地工程libs子目录下
Eclipse用户右键工程根目录,选择Properties -> Java Build Path -> Libraries,然后点击Add External JARs... 选择指向jar的路径,点击OK,即导入成功。
注意。

2.代码接入详解使用说明:

在下载代码后,里面有参考代码,代码都有注释和调用详解,先讲解ChartActivity调用类如何编写。

 

public class ChartActivity extends Activity {	private LinearLayout layout_chart;	@Override	protected void onCreate(Bundle savedInstanceState) {		// TODO Auto-generated method stub		super.onCreate(savedInstanceState);		// 先编写一个布局文件		this.setContentView(R.layout.layout_chart);		//创建一个线性容器,之后就是向着里面嵌套视图		layout_chart = (LinearLayout) this.findViewById(R.id.lay_chart);		LinearLayout.LayoutParams layParam = new LinearLayout.LayoutParams(				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);		layParam.gravity = Gravity.CENTER_HORIZONTAL;		//创建柱状性参数对象		ChartEntity entity = new ChartEntity();		entity.scale = 6;		entity.row_height = 60;		entity.row_weight = 4;		entity.padding_weight = 8;		//创建一个纵向数据容器		List hList = new ArrayList();		//创建一个横向数据容器,注解数据格式如:key,是否显示在横坐标		List wList = new ArrayList();		//创建一个存储高度值容器		HashMap map = new HashMap();		hList.add(0公里);		hList.add(10-);		hList.add(20-);		hList.add(30-);		entity.hList = hList;		for (int i = 0; i < 30; i++) {			String curStr;			if ((i + 1) % 5 == 0) {				curStr = (i + 1) + ,true;			} else {				curStr = (i + 1) + ,false;			}			wList.add(curStr);			map.put(curStr, i * 4);		}		entity.wList = wList;		entity.map = map;		ChartView chartView = new ChartView(this.getApplicationContext(),				entity);		layout_chart.addView(chartView, layParam);	}	@Override	protected void onDestroy() {		// TODO Auto-generated method stub		super.onDestroy();	}	@Override	protected void onPause() {		// TODO Auto-generated method stub		super.onPause();	}	@Override	protected void onResume() {		// TODO Auto-generated method stub		super.onResume();	}	@Override	protected void onStart() {		// TODO Auto-generated method stub		super.onStart();	}}

 

3.ChartEntity实体类核心代码详解:

ChartEntity是柱状图参数实体类,每个都有详解,供外部调用和修改。

/** * 柱状图形实体类 *  * @author 胡少平 *  */public class ChartEntity {        // 每个柱形纵向数据显示集:String = 显示内容        public List hList;        // 每个柱形横向数据显示集:String = 显示内容,true|false        public List wList;        //横向显示值        public HashMap map;        //柱形比例度        public int scale;        // 每个柱形横向柱状显示宽度        public int row_weight = 0;        // 每个柱形横向柱状间距        public int padding_weight = 0;        //横向起始点x坐标        public int startX = 30;        //每个柱形纵向显示宽度        public int row_height=0;        //每个柱形纵向        public int padding_height=12;        public ChartEntity() {                                // TODO Auto-generated constructor stub        }}

 

4.ChartViewUI组件核心代码详解如下:

 

/** *  * 柱状形显示UI组件 *  * @author 胡少平 *  */public class ChartView extends View {	private ChartEntity entity;	private Paint paint;	// 每个柱形宽度	private int zWith = 0;	private int zPadding = 0;	private int startX = 0;	private int totalHeight = 0;	private int lineHeight = 0;	private int zHeight = 0;	// 横向x坐标显示个数	private int wSize = 0;	// 纵向y坐标显示个数	private int hSize = 0;	public ChartView(Context context, ChartEntity entity) {		super(context);		paint = new Paint();		paint.setAntiAlias(true);		this.entity = entity;		zWith = DeviceInfo.DipToPixels(this.getContext(), entity.row_weight);		zPadding = DeviceInfo.DipToPixels(this.getContext(),				entity.padding_weight);		startX = DeviceInfo.DipToPixels(this.getContext(), entity.startX);		zHeight = DeviceInfo.DipToPixels(this.getContext(), entity.row_height);		totalHeight = DeviceInfo				.DipToPixels(this.getContext(), entity.row_height						* entity.hList.size() + entity.padding_height);		lineHeight = DeviceInfo.DipToPixels(this.getContext(),				entity.row_height * entity.hList.size());		wSize = entity != null && entity.wList != null				&& entity.wList.size() > 0 ? entity.wList.size() : 0;		hSize = entity != null && entity.hList != null				&& entity.hList.size() > 0 ? entity.hList.size() : 0;	}	public void drawAxis(Canvas canvas) {		//设置画笔属性		paint.setColor(Color.RED);		paint.setStrokeWidth(2);		paint.setTextSize(DeviceInfo.DipToPixels(this.getContext(), 12));		//用游标绘画线条		canvas.drawLine(startX, lineHeight, wSize * zWith + wSize * zPadding				+ startX, lineHeight, paint);		canvas.drawLine(startX, 0, startX, lineHeight, paint);		int x = 0;		int y = 0;		for (int i = 0; i < wSize; i++) {			x = startX + i * zPadding + (i) * zWith;			if (entity != null && entity.wList != null) {				String wVal = entity.wList.get(i);				String[] wArray = wVal.split(,);				if (wArray[1].equals(true)) {					canvas.drawText(wArray[0], x, totalHeight, paint);				}			}		}		for (int i = 0; i < hSize; i++) {			y = lineHeight - i * zHeight;			if (entity != null && entity.hList != null) {				String wVal = entity.hList.get(i);				String[] wArray = wVal.split(,);				if (i == 0) {					canvas.drawText(wArray[0],							DeviceInfo.DipToPixels(this.getContext(), 5), y,							paint);				} else {					//用游标绘画文本					canvas.drawText(							wArray[0],							startX									- DeviceInfo.DipToPixels(this.getContext(),											15), y, paint);				}			}		}	}	public void drawChart(Canvas canvas) {		paint.setColor(Color.RED);		if (entity != null && entity.wList.size() > 0) {			for (int i = 0; i < wSize; i++) {				int total = (int) (entity.map.get(entity.wList.get(i)) == null ? 0						: entity.map.get(entity.wList.get(i)) * entity.scale);				//用游标画一个方块				canvas.drawRect((i + 1) * zPadding + (i) * zWith + startX,						lineHeight - total, i * zPadding + i * zWith + startX,						lineHeight, paint);			}		}	}	@Override	public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {		super.onMeasure(widthMeasureSpec, heightMeasureSpec);		final int widthMode = MeasureSpec.getMode(widthMeasureSpec);		final int widthSize = MeasureSpec.getSize(widthMeasureSpec);		final int heightMode = MeasureSpec.getMode(heightMeasureSpec);		final int heightSize = MeasureSpec.getSize(totalHeight);		setMeasuredDimension(widthSize, heightSize);	}	@Override	public void onDraw(Canvas canvas) {		drawAxis(canvas);		drawChart(canvas);	}}

 

 

 

 

 

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();