2018May02_柱状图

SeniorUI03_Paint及paint使用实例总结
##1 Requirement

  • 用一组柱状图来表达一组数据,每个数据对象包含说明、值及值说明三个元素(柱低说明、柱高、柱顶说明)
  • 每条柱子有对应x坐标说明,柱高表示数值,柱顶显示说明
  • x坐标标识若文字过长可自动换行

#2 Effect Picture
这里写图片描述

#3 Theory

  • 自定义View,onDraw方法中canvas调用用Paint画图
  • 通过system.currentTimeMills()定义一个时间戳,在一段时间内,不断重 -绘,柱子的高度按时间进度变化;
  • 文本换行:确定绘制边界和文本内容,StaticLayout实现绘制和自动换行

#4 柱状图画法:

  1. 底部固定局域画x坐标,上部局域画柱状图;

  2. 柱状图的宽度和间距根据柱状图的个数和View的宽度确定;

  3. 柱状图x坐标由柱宽、间距和第几条确定

  4. 柱状图y坐标:获取数据y方向要显示最大值,确定柱状图可以显示局域的最大高度(顶部留固定高度),根据y值比例显示实际显示柱状图高度

  5. 柱顶数据:获取柱状图x,y坐标,获取数据文本的宽高,从而计算文本要显示的坐标

  6. x轴数据:计算柱状图中心坐标,根据要显示的局域、文本内容,测量计算是否需要换行

#4 Demo
BarChartView.java

#5 CoreCode
动画

   public void setBars(List<Bar> list) {
		...
        this.timeStart = System.currentTimeMillis();
        postInvalidate();
		...
   }
protected void onDraw(Canvas canvas) {
	...
	long timeCurrent = System.currentTimeMillis();
    if (timeCurrent - timeStart < TIME_ANIM) {
			drawBars(canvas, rateY, maxDescLength, false, timeCurrent);
            invalidate();
     } else {
            drawBars(canvas, rateY, maxDescLength, true, timeCurrent);
     }
  ...
}

测量文本宽高

Rect bound2 = new Rect();
mTextPaint.getTextBounds(desc, 0, desc.length(), bound2);
canvas.save();
canvas.translate(startX, startY);
StaticLayout layout = new StaticLayout(desc, textPaint, maxDescLength, 		Layout.Alignment.ALIGN_NORMAL, 0.8F, 0, false);
layout.draw(canvas);
canvas.restore();

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值