Android实现带节点的进度条_Android

来源:脚本之家  责任编辑:小易  

按节点付款与按进度付款区别在于:按进度付款,通常是按照工程的形象进度付款,或者叫节点付款;按进度付款是指按照施工单位申报已完工程量,监理、甲方进行审核,审核量为进度结算的依据。付款节点就是约定一个工程每次付款的时间或工程形象进度的节点(如基础完工付总价款的15%)。付款节点一般在工程招标时候就要约定,中标后签订施工合同时候就根据招标时候就要约定签署专用条款“工程款的支付方式”如第一种:基础完成经验收合格10天内付总价的15%,四层结构完成付至总价的30%,结构封顶付至60%,脚手架拆除付至70%,竣工验收合格30天内付至总价的90%,竣工结算后付至总价的95%,5%质保金期满30天付清www.zgxue.com防采集请勿采集本网。

日常的开发中经常会需要用到自定义View,这次刚好有个需求,需要用到带有节点的进度条。东西很简单直接继承View就行了。

基于以上规定,贵公司为本单位职工发放的工程节点进度奖励,是因其任职或者受雇而取得的奖金,并不是偶然性质的所得,不能适用20%的税率,应与当月工资、薪金合并计算缴纳个人所得税。

首先定义一些需要的属性

根据动态控制原理的要求,将总工期进行分解,确定施工关键节点的控制时间,确定关键线路,制定各自项的进度计划,形成施工进度控制的目标体系,根据实际情况不断地调整进度计划,采用组织、经济

/** * 背景画笔 */ private Paint bgPaint; /** * 前景画笔 */ private Paint forePaint; /** * 选中画笔 */ private Paint selectPaint; /** * 未选中画笔 */ private Paint unselectPaint; /** * 背景颜色 */ private int bgColor = Color.parseColor("#9C9C9C"); /** * 前景颜色 */ private int foreColor = Color.parseColor("#8A2BE2"); /** * 默认高度 */ private int defaultHeight; /** * 节点文字 */ private List<String> nodeList; private List<Rect> mBounds; /** * 节点圆的半径 */ private int radius; /** * 文字和节点进度条的top */ private int marginTop; /** * 两个节点之间的距离 */ private int dividWidth; /** * 选中位置 */ private int selectIndex;

就是约定一个工程每次付款的时间或工程形象进度的节点(如基础完工付总价款的15%)。付款节点一般在工程招标时候就要约定,中标后签订施工合同时候就根据招标时候就要约定签署专用条款“工程款的

然后在构造方法中初始化这些数据

我是来打酱油的,只是听说销售节点要与工程进度结合,工程的进度配合销售的各个关键点,在销售进场之前,首先拿到的不是营销报告,而是项目总工提供的工程进度表,根据进度表和财务的实际回款

private void init(Context context) { radius = SizeUtils.dp2px(context,4); defaultHeight = SizeUtils.dp2px(context,30); marginTop = SizeUtils.dp2px(context,5); bgPaint = new Paint(Paint.ANTI_ALIAS_FLAG); bgPaint.setColor(bgColor); bgPaint.setStyle(Paint.Style.FILL); forePaint = new Paint(Paint.ANTI_ALIAS_FLAG); forePaint.setColor(foreColor); forePaint.setStyle(Paint.Style.FILL); unselectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); unselectPaint.setColor(bgColor); unselectPaint.setTextSize(SizeUtils.sp2px(context,10)); selectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); selectPaint.setColor(foreColor); selectPaint.setTextSize(SizeUtils.sp2px(context,10)); }

销售时间进百度算法,举例:3月份按一个月30天来算,截止目前的时间进度=22/31=71.0%。1、时间节点是一个很抽象和应用很广泛的概念,通俗的说就是某个大环境度中的一个点或者一段,好比公交车

设置节点文字

/** * 设置数据 * @param nodeDatas */ public void setNodeList(List<String> nodeDatas){ if(nodeDatas != null){ nodeList = nodeDatas; } //测量文字所占用的空间 measureText(); } /** * 设置选中位置 * @param selectIndex */ public void setSelectIndex(int selectIndex){ this.selectIndex = selectIndex; invalidate(); }/** * 测量文字的长宽 */ private void measureText(){ mBounds = new ArrayList<>(); for (int i = 0; i < nodeList.size(); i++) { Rect mBound = new Rect(); unselectPaint.getTextBounds(nodeList.get(i),0,nodeList.get(i).length(),mBound); mBounds.add(mBound); } }

最后重要的步骤,开始在onDraw中绘制节点进度条和绘制文字

1、绘制灰色背景线条

if(nodeList == null || nodeList.isEmpty()){ return; } bgPaint.setStrokeWidth(radius/2); //绘制灰色的背景线条 canvas.drawLine(radius,radius,getWidth()-radius,radius,bgPaint);

2、绘制节点上的圆和两个节点之间的间隔线条

//画节点圆 //每个圆相隔的距离 dividWidth = (getWidth()-radius*2)/(nodeList.size() - 1); forePaint.setStrokeWidth(radius/2); for (int i = 0; i < nodeList.size(); i++) { if(i == selectIndex){ for (int j = 0; j <= i; j++) { canvas.drawCircle(radius+ j * dividWidth, radius, radius , forePaint); canvas.drawLine(radius,radius,j*dividWidth,radius,forePaint); } }else if(i>selectIndex){ canvas.drawCircle(radius + i * dividWidth, radius, radius, bgPaint); } }

3、绘制节点上的文字

for (int i = 0; i < nodeList.size(); i++) { int currentTextWidth=mBounds.get(i).width(); if (i==0){ if (i==selectIndex){ canvas.drawText(nodeList.get(i), 0, radius*2 + marginTop + mBounds.get(i).height()/2, selectPaint); }else if(i>selectIndex) { canvas.drawText(nodeList.get(i), 0, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } }else if (i==nodeList.size()-1){ if (i==selectIndex){ for (int j = 0; j <= i; j++) { if(j == 0){ canvas.drawText(nodeList.get(j), 0, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); }else if(j == i){ canvas.drawText(nodeList.get(j), getWidth() - currentTextWidth, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); }else{ canvas.drawText(nodeList.get(j), radius + j * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); } } }else if(i>selectIndex) { canvas.drawText(nodeList.get(i), getWidth() - currentTextWidth, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } }else { if (i==selectIndex){ for (int j = 0; j <= i; j++) { if(j>0){ canvas.drawText(nodeList.get(j), radius + j * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); }else{ canvas.drawText(nodeList.get(j), 0, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); } } }else if(i>selectIndex) { canvas.drawText(nodeList.get(i), radius + i * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } } }

有时候可能需要的是下面这种进度条

只需要修改onDraw中绘制节点圆和文字的方法就可以了

for (int i=0; i < nodeList.size();i++) { if (i==selectIndex){ canvas.drawCircle(radius+ i * dividWidth, radius, radius , forePaint); }else { canvas.drawCircle(radius + i * dividWidth, radius, radius, bgPaint); } } for (int i=0; i<nodeList.size();i++){ int currentTextWidth=mBounds.get(i).width(); if (i==0){ if (i==selectIndex){ canvas.drawText(nodeList.get(i), 0, radius*2 + marginTop + mBounds.get(i).height()/2, selectPaint); }else { canvas.drawText(nodeList.get(i), 0, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } }else if (i==nodeList.size()-1){ if (i==selectIndex){ canvas.drawText(nodeList.get(i), getWidth() - currentTextWidth, radius*2 + marginTop + mBounds.get(i).height()/2, selectPaint); }else { canvas.drawText(nodeList.get(i), getWidth() - currentTextWidth, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } }else { if (i==selectIndex){ canvas.drawText(nodeList.get(i), radius + i * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(i).height()/2, selectPaint); }else { canvas.drawText(nodeList.get(i), radius + i * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } } }

点击节点进行节点切换

// 实现节点切换,把注释打开就行了@Override public boolean onTouchEvent(MotionEvent event) { float eventX; float eventY; int i = event.getAction(); if (i == MotionEvent.ACTION_DOWN) { } else if (i == MotionEvent.ACTION_MOVE) { } else if (i == MotionEvent.ACTION_UP) { eventX = event.getX(); eventY = event.getY(); //计算选中的index float select = eventX / dividWidth; float xs = select - (int) (select); //selectIndex = (int) select + (xs > 0.5 ? 1 : 0); } //invalidate(); return true; }

施工中包含各种工种,如混凝土,钢结构安装等,某一项的完成对整个的工程进度起到很关键作用的部分,比如钢结构的安装完成对整个的后续工程有很重要的决定作用时,这个完成点就是节点内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • android自定义进度条效果
  • android实现垂直进度条verticalseekbar
  • android实现环形进度条
  • android自定义view实现渐变色进度条
  • android自定义view实现加载进度条效果
  • android实现弹窗进度条效果
  • android实现音乐播放器进度条效果
  • android 七种进度条的样式
  • android中实现webview顶部带进度条的方法
  • android自定义进度条渐变色view的实例代码
  • android开发中datepicker日期与时间控件实例代码
  • android开发实现fragment监听返回键事件功能的方法
  • android实现编程修改手机静态ip的方法
  • android编程自定义组件实例详解
  • android实现年龄段选择器
  • android利用dom对xml进行增删改查操作详解
  • android 中使用recyclerview实现底部翻页
  • 探讨android 的屏幕滚动操作不如 iphone 流畅顺滑的原因
  • android实现自动播放图片功能
  • android实现手写签名
  • 施工进度计划中的节点怎么理解?请举例赐教
  • 工程付款:按节点付款与按进度付款有何区别?
  • 网络计划图中虚线和实线分别表示什么
  • 建设工程施工合同不按节点进度完成怎么罚款
  • 工程节点进度奖励如何缴税
  • 监理进度控制方法与措施
  • 建筑单位付款节点是什么意思
  • 装饰工程的进度关键节点有哪些
  • 销售时间进度是怎么算的
  • 单位工程进度计划节点较大,是什么意思
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页androidandroid自定义进度条效果android实现垂直进度条verticalseekbarandroid实现环形进度条android自定义view实现渐变色进度条android自定义view实现加载进度条效果android实现弹窗进度条效果android实现音乐播放器进度条效果android 七种进度条的样式android中实现webview顶部带进度条的方法android自定义进度条渐变色view的实例代码android开发中datepicker日期与时间控件实例代码android开发实现fragment监听返回键事件功能的方法android实现编程修改手机静态ip的方法android编程自定义组件实例详解android实现年龄段选择器android利用dom对xml进行增删改查操作详解android 中使用recyclerview实现底部翻页探讨android 的屏幕滚动操作不如 iphone 流畅顺滑的原因android实现自动播放图片功能android实现手写签名一看就懂的android app开发入门教微信公众平台开发入门教程(图文详android基础之使用fragment控制切六款值得推荐的android(安卓)开android textview设置中文字体加android应用开发sharedpreferencandroid 动画之translateanimatiandroid压力测试命令monkey详解android按钮单击事件的四种常用写android调试工具ddms的使用详解monkeyrunner环境搭建及实例教程(3)android studio中的gradle依赖深入讲解详谈android动画效果translate、scale、aandroid沉浸式状态栏实现android实现自动填充短信验证码功能android开发基于scrollview实现的渐变导航android编程实现textview部分颜色变动的方android 的触摸事件详解及示例代码android中webview控件和javascript交互实android简单记录和恢复listview滚动位置的
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved