热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

android实现节点进度条效果

这篇文章主要为大家详细介绍了android实现节点进度条效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了android实现节点进度条效果展示的具体代码,供大家参考,具体内容如

代码:

package utils.android.view.lxz; 
 
import java.util.ArrayList; 
import java.util.List; 
import com.community.custom.android.R; 
 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.graphics.drawable.ShapeDrawable; 
import android.graphics.drawable.shapes.OvalShape; 
import android.util.AttributeSet; 
import android.util.DisplayMetrics; 
import android.util.Log; 
import android.view.View; 
 
/** 
 * 2015-1-24 
 * 小林爱 
 * */ 
public class NodeProgressBar extends View implements Runnable { 
 
 private float dn=1f; 
 DisplayMetrics metrics; 
 { 
 metrics=new DisplayMetrics(); 
 ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); 
 dn=1*3/metrics.density; 
 } 
 /**读取空进度条图片*/ 
 private BitmapDrawable db_empty; 
 /**View宽度*/ 
 private int viewWidth; 
 /**View高度*/ 
 private int viewHeight; 
 /** 
 * 白色空心圆图片集合 
 * */ 
 private List list_whitecircle ; 
 /** 
 * 蓝色实心圆图片集合 
 * */ 
 private List list_bluecircle ; 
 /**蓝色进度条*/ 
 private BitmapDrawable db_blue; 
 
 /**进度比值 控制蓝色进度条*/ 
 private double ratio = 0; 
 /**节点名称*/ 
 private String[] textArr=new String[]{"等待服务","服务中","等待评价","成功"}; 
 /**节点数*/ 
 private int count=textArr.length;; 
 /**当前节点进度*/ 
 private int index = 0; 
 /**X轴对称 偏移值*/ 
 private int offX=(int) (50/dn); 
 /**Y轴 偏移值*/ 
 private int offY=(int) (70/dn); 
 /**文字与节点 偏移值*/ 
 private int offTextY=(int) (65/dn); 
 /**白色空心圆偏移值*/ 
 private int offWhiteCirle_y=(int) (-3/dn); 
 /**白色空心进度条偏移值*/ 
 private int offWhiteRect_y=(int) (-2/dn); 
 /**白色空心进度条偏移值*/ 
 private BitmapDrawable db_blue_half_circle; 
 /**创建一只新画笔*/ 
 private Paint paint = new Paint(); 
 /**白色空心圆半径*/ 
 private int r_white = (int) (76/dn); 
 /**蓝色空心圆半径*/ 
 private int r_blue = (int) (56/dn); 
 /**白色进度条高度*/ 
 private int whiteProgressHeight = (int) (30/dn); 
 /**蓝色进度条高度*/ 
 private int blueProgressHeight = (int) (16/dn); 
 
 /**文本颜色j*/ 
 private String textColor="#46A3FF"; 
 /**文本未激活颜色*/ 
 private String textColorNotEnabled="#7E7E81"; 
// /**View 背景颜色*/ 
// private String bgColor="#e0000000"; 
 /**文本框大小*/ 
 private int textSize=(int) (32/dn); 
 
 /**白色空心进度条宽度*/ 
 private int maxProgressWidth; 
 /**半圆蓝色进度条宽度*/ 
 private int half_blueWidth = (int) (12/dn); 
 
 
 
 public String[] getTextArr() { 
 return textArr; 
 } 
 
 public void setTextArr(String[] textArr) { 
 this.textArr = textArr; 
 count=textArr.length;; 
 init(); 
 this.post(new Runnable() { 
 
 @Override 
 public void run() { 
 //读取View宽度 
 viewWidth = NodeProgressBar.this.getWidth(); 
 //读取View高度 
 viewHeight = NodeProgressBar.this.getHeight(); 
 // 进度条宽度计算 
 maxProgressWidth = viewWidth - r_white-offX*2; 
 //绘制 
 
 invalidate(); 
 } 
 }); 
 
 } 
 
 @SuppressWarnings("deprecation") 
 public NodeProgressBar(Context context) { 
 super(context); 
 init(); 
 } 
 
 public NodeProgressBar(Context context, AttributeSet attrs) { 
 super(context, attrs); 
 init(); 
 } 
 /**控制蓝色进度条*/ 
 public void setProgressOnly(int i) { 
 ratio = i / 100d; 
 invalidate(); 
 } 
 
 /**以节点数来空值进度条 至少大于1*/ 
 public void setProgressByNode(final double d) 
 { 
 this.post(new Runnable() { 
 
 @Override 
 public void run() { 
 // TODO Auto-generated method stub 
 int progress; 
 if(d==1) 
 { 
  progress=1; 
 }else 
 { 
  progress= (int) ( (100d/((count-1)*1.0d))*(d-1)); 
 } 
 setProgressAndIndex(progress); 
  
 } 
 }); 
 } 
 
 
 /**控制蓝色进度条并且对节点染色*/ 
 public void setProgressAndIndex(int i){ 
 if(i==0){ 
 index=0; 
 ratio=0; 
 invalidate(); 
 return ; 
 } 
 //获得相对进度条长度 
 int adbProgress = maxProgressWidth-(count-1)*r_white; 
 //得到每一个节点所需进度值 
 int k=100/(count-1); 
 //计算当前进度需要染色的节点个数 
 index=1+i/k; 
 if(index!=count) 
 { 
 //获得节点磁力比率 
 double wh=1.0d*(r_white/2)/(double)maxProgressWidth; 
 //计算蓝色进度条和染色节点宽度 
 ratio=i%100==0?ratio=1:wh+wh*2*(index-1)+1.0d*((double)adbProgress/(double)maxProgressWidth)*(i/100d); 
 }else 
 { 
 //设置进度条为满 
 ratio=1; 
 } 
 invalidate(); 
 } 
 
 /** 
 * 初始化图片资源,和基础数值 
 * */ 
 @SuppressWarnings("deprecation") 
 private void init() { 
 metrics=new DisplayMetrics(); 
 ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); 
 Log.d("lxz", ""+metrics.density); 
 dn=1*3/metrics.density; 
 list_whitecircle=new ArrayList(); 
 list_bluecircle=new ArrayList(); 
 //根据节点个数 初始化空心圆和实心圆 
 for (int i = 0; i  0) { 
 
 drawRect(canvas, db_blue_half_circle,(int) ((maxProgressWidth * ratio) / 2) 
  + (int) (maxProgressWidth * ratio) / 2 + half_blueWidth 
  / 2+offAbs_x, r_white / 2+offY, half_blueWidth, 
  blueProgressHeight); 
 } 
 //绘制蓝色圆 
 for (int i = 0, j = index; i 

源码下载:节点进度条

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 如何在文本中运行Java程序
    本文介绍了在文本中运行Java程序的步骤,包括创建文本文档、修改后缀、打开DOS命令窗口、编译和运行程序。通过这些步骤,可以在文本中成功运行Java程序并输出结果。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文介绍了使用SSH免密登录的步骤,包括生成公私钥、传递公钥给被登录机、修改文件权限的操作。同时提醒用户注意私钥的传递方式,建议使用U盘等离线方式传递。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
author-avatar
0o墨滴成殇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有