安卓自定义流程进度图控件实例代码

先上效果图:

如图,可实现设置:总流程数、已完进度程数、已完成颜色,各个标题

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);
 }
}

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

(0)

相关推荐

  • Android自定义View基础开发之图片加载进度条

    学会了Paint,Canvas的基本用法之后,我们就可以动手开始实践了,先写个简单的图片加载进度条看看. 按照惯例,先看效果图,再决定要不要往下看: 既然看到这里了,应该是想了解这个图片加载进度条了,我们先看具体用法,再看自定义View的实现: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.co

  • Android带进度条的下载图片示例(AsyncTask异步任务)

    为什么要用异步任务? 在Android中只有在主线程才能对ui进行更新操作,而其它线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把所有的操作都放在主线程中操作 ,比如一些耗时操作.如果放在主线程中 会造成阻塞 而当阻塞事件过长时 系统会抛出anr异常.所以我们要使用异步任务.android为我们提供了一个封装好的组件asynctask. AsyncTask可以在子线程中更新ui,封装简化了异步操作.适用于简单的异步处理.如果多个后台任务时就要使用Handler了

  • Android使用AsyncTask下载图片并显示进度条功能

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask.这篇文章给大家介绍Android使用AsyncTask下载图片并显示进度条功能. AsyncTask下载图片并显示下载进度,异步类AsyncTask配合进度条,简练! public class AsyncTaskActivity2 extends Activity { private Button btnDown;//图片框 private ImageView ivImage;//图片URL private sta

  • 安卓自定义流程进度图控件实例代码

    先上效果图: 如图,可实现设置:总流程数.已完进度程数.已完成颜色,各个标题 github地址戳这里 使用方法 1.导入compile 'com.github.pavlospt:circleview:1.3'依赖包(因为用到了CircleView) 2.直接把下面两个文件一个java一个xml,复制粘贴进项目(代码放在了文章最后,暂时还没弄成开源库,有时间直接做成依赖包倒进去) 在xml中写入ProcessImg控件 在java文件中实例化ProcessImg对象 根据需要调用几个方法 1.对象

  • Android自定义顶部导航栏控件实例代码

    下面一段代码给大家介绍了android 自定义顶部导航栏控件功能,具体代码如下所示: class HeaderBar @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : FrameLayout(context, attrs, defStyleAttr) { //重写构造方法 在java里面 我们一般是重写三个构造方法//在kotlin中 我们可以使用

  • Android 底部导航控件实例代码

    一.先给大家展示下最终效果 通过以上可以看到,图一是简单的使用,图二.图三中为结合ViewPager共同使用,而且都可以随ViewPager的滑动渐变色,不同点是图二为选中非选中两张图片,图三的选中非选中是一张图片只是做了颜色变化. 二. 需求 我们希望做可以做成这样的,可以在xml布局中引入控件并绑定数据,在代码中设置监听回调,并且配置使用要非常简单! 三.需求分析 根据我们多年做不明确需求项目的经验,以上需求还算明确.那么我们可以采用在LinearLayout添加子View控件,这个子Vie

  • C#实现简单的loading提示控件实例代码

    自己画一个转圈圈的控件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows

  • vue递归组件实战之简单树形控件实例代码

    1.递归组件-简单树形控件预览及问题 在编写树形组件时遇到的问题: 组件如何才能递归调用? 递归组件点击事件如何传递? 2.树形控件基本结构及样式 <template> <ul class="vue-tree"> <li class="tree-item"> <div class="tree-content"><!--节点内容--> <div class="expand-

  • iOS自定义圆形进度提示控件

    iOS中默认的进度条是水平方向的进度条,这往往不能满足我们的需求.但是我们可以自定义类似的圆形的进度提示控件,主要使用iOS中的绘图机制来实现.这里我们要实现一个通过按钮点击然后圆形进度提示不断增加的效果. (1)新建一个Cocoa Touch Class,注意要继承自UIView.这个是绘制图形的类,绘制一个圆形的背景和扇形的进度.具体实现如下: import UIKit class ProgressControl: UIView { override init(frame: CGRect)

  • Android实现万能自定义阴影控件实例代码

    目录介绍 01.阴影效果有哪些实现方式 02.实现阴影效果Api 03.设置阴影需要注意哪些 04.常见Shape实现阴影效果 05.自定义阴影效果控件 06.如何使用该阴影控件 07.在recyclerView中使用注意点 01.阴影效果有哪些实现方式 阴影效果有哪些实现方式 第一种:使用CardView,但是不能设置阴影颜色 第二种:采用shape叠加,存在后期UI效果不便优化 第三种:UI切图 第四种:自定义View 否定上面前两种方案原因分析? 第一个方案的CardView渐变色和阴影效

  • 在WPF中动态加载XAML中的控件实例代码

    本文实例讲述了在WPF中动态加载XAML中的控件的方法.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using S

  • Android开发中DatePicker日期与时间控件实例代码

    一.简介 二.方法 最日常的使用方法了 日期控件DatePicker 时间控件TimePicker 月份从0开始 三.代码实例 效果图: 代码: fry.Activity01 package fry; import com.example.DatePicherDemo1.R; import android.app.Activity; import android.os.Bundle; import android.widget.DatePicker; import android.widget.

  • Android实现滑动选择控件实例代码

    前言 最近做了个滑动选择的小控件,拿出来给大家分享一下,先上图 运行效果 实现步骤 这里分解为3个动作:Down.Move.Up来进行分析,博主文采不好,大家直接看流程图吧!! 代码分析 前置知识 1.这个地方使用的是RecyclerView的代码,使用RecyclerView只能使用LinearLayoutManager,ListView的运行效果稍微要比RecyclerView差一些 //这里使用dispatchTouchEvent,因为onTouchEvent容易被OnTouchListe

随机推荐