安卓自定义流程进度图控件实例代码
发布时间 - 2026-01-11 01:56:31 点击率:次先上效果图:
如图,可实现设置:总流程数、已完进度程数、已完成颜色,各个标题
github地址戳这里
使用方法
1.导入compile 'com.github.pavlospt:circleview:1.3'依赖包(因为用到了CircleView)
2.直接把下面两个文件一个java一个xml,复制粘贴进项目(代码放在了文章最后,暂时还没弄成开源库,有时间直接做成依赖包倒进去)
在xml中写入ProcessImg控件
在java文件中实例化ProcessImg对象
根据需要调用几个方法
1.对象.setColor( int color )
设置已完成的进度的颜色,传入颜色的整型值
2.对象.setProcess( int total , int process )
设置总流程数和已完成进度数,第一个参数为总流程数(1~6,因为超过6个堆在一排很难看),第二个为已完成数,均为整型变量
3.对象.setTitle( int position , String text )
设置各流程的标题,第一个参数为标题对应的流程数(1~total),第二个参数为String格式标题文本
源码
源码很简单,注释也比较清楚,应该能看懂
process_img.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/processImg_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="20dp">
<LinearLayout
android:id="@+id/process1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:id="@+id/view1l"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
<com.github.pavlospt.CircleView
android:id="@+id/circle1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
app:cv_backgroundColorValue="#00000000"
app:cv_fillColor="#00000000"
app:cv_strokeColorValue="#00000000"
app:cv_subtitleText=""
app:cv_titleColor="#fff"
app:cv_titleSize="20sp"
app:cv_titleText="1"/>
<View
android:id="@+id/view1r"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
</LinearLayout>
<TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="text1"
android:textColor="#00000000"/>
</LinearLayout>
<LinearLayout
android:id="@+id/process2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:id="@+id/view2l"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
<com.github.pavlospt.CircleView
android:id="@+id/circle2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
app:cv_backgroundColorValue="#00000000"
app:cv_fillColor="#00000000"
app:cv_strokeColorValue="#00000000"
app:cv_subtitleText=""
app:cv_titleColor="#fff"
app:cv_titleSize="20sp"
app:cv_titleText="2"/>
<View
android:id="@+id/view2r"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
</LinearLayout>
<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="text2"
android:textColor="#00000000"/>
</LinearLayout>
<LinearLayout
android:id="@+id/process3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:id="@+id/view3l"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
<com.github.pavlospt.CircleView
android:id="@+id/circle3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
app:cv_backgroundColorValue="#00000000"
app:cv_fillColor="#00000000"
app:cv_strokeColorValue="#00000000"
app:cv_subtitleText=""
app:cv_titleColor="#fff"
app:cv_titleSize="20sp"
app:cv_titleText="3"/>
<View
android:id="@+id/view3r"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
</LinearLayout>
<TextView
android:id="@+id/text3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="text3"
android:textColor="#00000000"/>
</LinearLayout>
<LinearLayout
android:id="@+id/process4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:id="@+id/view4l"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
<com.github.pavlospt.CircleView
android:id="@+id/circle4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
app:cv_backgroundColorValue="#00000000"
app:cv_fillColor="#00000000"
app:cv_strokeColorValue="#00000000"
app:cv_subtitleText=""
app:cv_titleColor="#fff"
app:cv_titleSize="20sp"
app:cv_titleText="4"/>
<View
android:id="@+id/view4r"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
</LinearLayout>
<TextView
android:id="@+id/text4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="text4"
android:textColor="#00000000"/>
</LinearLayout>
<LinearLayout
android:id="@+id/process5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:id="@+id/view5l"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
<com.github.pavlospt.CircleView
android:id="@+id/circle5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
app:cv_backgroundColorValue="#00000000"
app:cv_fillColor="#00000000"
app:cv_strokeColorValue="#00000000"
app:cv_subtitleText=""
app:cv_titleColor="#fff"
app:cv_titleSize="20sp"
app:cv_titleText="5"/>
<View
android:id="@+id/view5r"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
</LinearLayout>
<TextView
android:id="@+id/text5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="text5"
android:textColor="#00000000"/>
</LinearLayout>
<LinearLayout
android:id="@+id/process6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:id="@+id/view6l"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
<com.github.pavlospt.CircleView
android:id="@+id/circle6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
app:cv_backgroundColorValue="#00000000"
app:cv_fillColor="#00000000"
app:cv_strokeColorValue="#00000000"
app:cv_subtitleText=""
app:cv_titleColor="#fff"
app:cv_titleSize="20sp"
app:cv_titleText="6"/>
<View
android:id="@+id/view6r"
android:layout_width="0dp"
android:layout_height="5dp"
android:layout_weight="2"
android:background="#00000000"/>
</LinearLayout>
<TextView
android:id="@+id/text6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="text6"
android:textColor="#00000000"/>
</LinearLayout>
</LinearLayout>
ProcessImg.java
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.github.pavlospt.CircleView;
import com.zxzhu.processtest.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by zxzhu on 2017/6/18.
*/
public class ProcessImg extends LinearLayout {
private String TAG = "ProcessImg";
private CircleView circleView1, circleView2, circleView3, circleView4, circleView5, circleView6;
private TextView textView1, textView2, textView3, textView4, textView5, textView6;
//view代表流程连接线
private View view1l, view1r, view2l, view2r, view3l, view3r, view4l, view4r, view5l, view5r, view6l, view6r;
private LinearLayout process1, process2, process3, process4, process5, process6;
private List<LinearLayout> layouts = new ArrayList<>();//用于控制流程个数的列表
private List<View> views = new ArrayList<>();
private List<TextView> texts = new ArrayList<>();
private List<CircleView> circleViews = new ArrayList<>();
private Context context;
private int color = Color.parseColor("#E0E0E0");
private int total = 0, process = 0;
public ProcessImg(Context context) {
super(context);
this.context = context;
initViews();
}
public ProcessImg(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
this.context = context;
initViews();
}
private void initViews() {
LayoutInflater.from(context).inflate(R.layout.process_img, this);
circleView1 = (CircleView) findViewById(R.id.circle1);
circleView2 = (CircleView) findViewById(R.id.circle2);
circleView3 = (CircleView) findViewById(R.id.circle3);
circleView4 = (CircleView) findViewById(R.id.circle4);
circleView5 = (CircleView) findViewById(R.id.circle5);
circleView6 = (CircleView) findViewById(R.id.circle6);
process1 = (LinearLayout) findViewById(R.id.process1);
process2 = (LinearLayout) findViewById(R.id.process2);
process3 = (LinearLayout) findViewById(R.id.process3);
process4 = (LinearLayout) findViewById(R.id.process4);
process5 = (LinearLayout) findViewById(R.id.process5);
process6 = (LinearLayout) findViewById(R.id.process6);
textView1 = (TextView) findViewById(R.id.text1);
textView2 = (TextView) findViewById(R.id.text2);
textView3 = (TextView) findViewById(R.id.text3);
textView4 = (TextView) findViewById(R.id.text4);
textView5 = (TextView) findViewById(R.id.text5);
textView6 = (TextView) findViewById(R.id.text6);
view1l = findViewById(R.id.view1l);
view1r = findViewById(R.id.view1r);
view2l = findViewById(R.id.view2l);
view2r = findViewById(R.id.view2r);
view3l = findViewById(R.id.view3l);
view3r = findViewById(R.id.view3r);
view4l = findViewById(R.id.view4l);
view4r = findViewById(R.id.view4r);
view5l = findViewById(R.id.view5l);
view5r = findViewById(R.id.view5r);
view6l = findViewById(R.id.view6l);
view6r = findViewById(R.id.view6r);
circleViews.add(circleView1);
circleViews.add(circleView2);
circleViews.add(circleView3);
circleViews.add(circleView4);
circleViews.add(circleView5);
circleViews.add(circleView6);
layouts.add(process1);
layouts.add(process2);
layouts.add(process3);
layouts.add(process4);
layouts.add(process5);
layouts.add(process6);
texts.add(textView1);
texts.add(textView2);
texts.add(textView3);
texts.add(textView4);
texts.add(textView5);
texts.add(textView6);
views.add(view1l);
views.add(view1r);
views.add(view2l);
views.add(view2r);
views.add(view3l);
views.add(view3r);
views.add(view4l);
views.add(view4r);
views.add(view5l);
views.add(view5r);
views.add(view6l);
views.add(view6r);
}
/**
* 设置已完成流程颜色
*
* @param color
*/
public void setColor(int color) {
this.color = color;
setProcess(total, process);
}
/**
* 设置进度
*
* @param total 总共流程个数(不超过6)
* @param process 当前进度
*/
public void setProcess(int total, int process) {
this.total = total;
this.process = process;
//使流程总数的view显示出来
for (int i = 0; i < total; i++) {
layouts.get(i).setVisibility(VISIBLE);
}
// 设置已完成进度的颜色
for (int i = 0; i < circleViews.size(); i++) {
if (i < process) {
circleViews.get(i).setFillColor(color);
circleViews.get(i).setBackgroundColor(color);
circleViews.get(i).setStrokeColor(color);
texts.get(i).setTextColor(color);
} else {
//未完成设置为灰色
circleViews.get(i).setFillColor(Color.parseColor("#CCCCCC"));
circleViews.get(i).setBackgroundColor(Color.parseColor("#CCCCCC"));
texts.get(i).setTextColor(Color.parseColor("#CCCCCC"));
circleViews.get(i).setStrokeColor(color);
circleViews.get(i).setStrokeColor(Color.parseColor("#CCCCCC"));
}
}
//设置流程连接线的颜色
for (int i = 0; i < views.size(); i++) {
if (i < process * 2) {
views.get(i).setBackgroundColor(color);
} else {
views.get(i).setBackgroundColor(Color.parseColor("#CCCCCC"));
}
}
views.get(0).setBackgroundColor(Color.parseColor("#00000000"));
if (total != 0) {
views.get(2 * total - 1).setBackgroundColor(Color.parseColor("#00000000"));
}
}
/**
* 设置各进度标题
*
* @param position
* @param text
*/
public void setTitle(int position, String text) {
texts.get(position - 1).setText(text);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android自定义进度图
# Android自定义流程图
# Android带进度条的下载图片示例(AsyncTask异步任务)
# Android使用AsyncTask下载图片并显示进度条功能
# Android自定义View基础开发之图片加载进度条
# 第一个
# 第二个
# 整型
# 几个
# 还没
# 放在
# 均为
# 很简单
# 不超过
# 如图
# 设置为
# 开源
# 未完成
# 大家多多
# 弄成
# 能看懂
# 很难看
# 为总
# layout_width
# match_parent
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在IIS7上新建站点并设置安全权限?
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
JavaScript模板引擎Template.js使用详解
公司网站制作价格怎么算,公司办个官网需要多少钱?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel如何实现模型的全局作用域?(Global Scope示例)
如何快速生成高效建站系统源代码?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
高防服务器租用首荐平台,企业级优惠套餐快速部署
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Linux系统运维自动化项目教程_Ansible批量管理实战
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
PythonWeb开发入门教程_Flask快速构建Web应用
javascript基于原型链的继承及call和apply函数用法分析
Laravel如何生成URL和重定向?(路由助手函数)
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何基于云服务器快速搭建个人网站?
java中使用zxing批量生成二维码立牌
大同网页,大同瑞慈医院官网?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何用搬瓦工VPS快速搭建个人网站?
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
Laravel怎么清理缓存_Laravel optimize clear命令详解
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
香港服务器选型指南:免备案配置与高效建站方案解析
香港服务器建站指南:免备案优势与SEO优化技巧全解析
Android自定义listview布局实现上拉加载下拉刷新功能
JavaScript数据类型有哪些_如何准确判断一个变量的类型
php485函数参数是什么意思_php485各参数详细说明【介绍】
如何在云主机快速搭建网站站点?
高防服务器租用如何选择配置与防御等级?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?

