diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 2a5925b..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -StepView \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 8564fbb..7377cc1 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,13 +12,7 @@ - + diff --git a/.idea/libraries/StepView_v1_0.xml b/.idea/libraries/StepView_v1_0.xml deleted file mode 100644 index 595f63b..0000000 --- a/.idea/libraries/StepView_v1_0.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/appcompat_v7_23_4_0.xml b/.idea/libraries/appcompat_v7_23_4_0.xml index 62e7814..60ef5c3 100644 --- a/.idea/libraries/appcompat_v7_23_4_0.xml +++ b/.idea/libraries/appcompat_v7_23_4_0.xml @@ -2,11 +2,11 @@ - + - + diff --git a/.idea/libraries/support_v4_23_4_0.xml b/.idea/libraries/support_v4_23_4_0.xml index c4b526e..05c2ddb 100644 --- a/.idea/libraries/support_v4_23_4_0.xml +++ b/.idea/libraries/support_v4_23_4_0.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.idea/misc.xml b/.idea/misc.xml index c366576..5d19981 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,13 +3,6 @@ - - - - - - - - - - - - Android - - - Android Lint - - - Java - - - Java language level migration aidsJava - - - - - Android - - - - - diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Introduction.md b/Introduction.md new file mode 100644 index 0000000..409294d --- /dev/null +++ b/Introduction.md @@ -0,0 +1,450 @@ +## StepView Detail Introduction +现在,绝大部分公司对于一个项目订单流程控制不外乎从订单的初始状态到订单完成的状态,总结起来就是关于一个物体(订单/工单)状态变化的事物属性。所以就有了下面类似图片的效果,从订单的初始状态到订单完成。一个好的流程展示,对于工作效率的提高尤其的关键。该库代码看起来简洁,加上了详细的备注,看起来不会那么枯燥,也方便定制。那么废话不多说,直接进入正题。 + + +## preview +可能当前的StepView展示的点是动态的,有时候是两个,有时候是三个,有时候是四个甚至五个六个,之前有想过展示成下面的效果。 + + +但是当stepview的个数为2时效果太丑,一个距最左边,一个距左右边。能不忍,改吧,改了变成下面的效果 + + +上下对比下是不是好看了很多呢。 + +## What can be learned about this page +好了,我们通过这篇文章可以学习哪些知识呢? + +* 自定义控件的加强 +* Canvas,Paint的使用 +* 如何绘制矩形 +* 如何绘制虚线 +* 如何绘制圆 +* 加上小小的数学计算,哈哈,开个小玩笑,学过数学,应该不成问题! + +## start-pre +写这个开源项目前的热身 + +* 首先我们来画一个矩形 + +```java +public class RectView extends View + { + + public RectView(Context context) + { + super(context); + } + + @Override + protected void onDraw(Canvas canvas) + { + + super.onDraw(canvas); + setBackgroundResource(R.drawable.default_bg);//设置背景色 + + //----绘制矩形------------ + Paint paint = new Paint();// 定义画笔 + paint.setStyle(Paint.Style.FILL);//设置实心 + paint.setAntiAlias(true);// 消除锯齿 + paint.setColor(Color.WHITE);//设置画笔颜色 + paint.setStrokeWidth(40);// 设置paint的外框宽度 + canvas.drawRect(200, 200, 800, 220, paint);//绘制矩形 + //----绘制矩形------------ + } + } +} +``` +如下图:绘制矩形,因为绘制矩形需要知道左上又下四个点的坐标。 +我们设置好四个点的坐标,绘制如下图 + + +接上面绘制圆 + + +```java + //----绘制圆--------------------- + canvas.drawCircle(350, 350, 100, paint); + //----绘制圆--------------------- +``` +因为绘制圆需要圆点和半径,定义好后,展示如下: + + + +接着绘制虚线 + +```java + //----绘制虚线--------------------- + Paint pathPaint = new Paint(); + pathPaint.setAntiAlias(true); + pathPaint.setColor(Color.WHITE); + pathPaint.setStyle(Paint.Style.STROKE); + pathPaint.setStrokeWidth(2); + DashPathEffect mEffects = new DashPathEffect(new float[]{8, 8, 8, 8}, 1); + Path path = new Path(); + path.moveTo(200, 600); + path.lineTo(800, 600); + pathPaint.setPathEffect(mEffects); + canvas.drawPath(path, pathPaint); + //----绘制虚线--------------------- + } + } +``` +这里用到一个新控件 + +DashPathEffect:DashPathEffect是PathEffect类的一个子类,可以使paint画出类似虚线的样子,并且可以任意指定虚实的排列方式. +好了,我们通过canvas.drawPath(path, pathPaint)绘制如下图 + + +难点说完了,我们就开始我们的项目吧。 + + + +## 构成 +我们拿这个局部图来做栗子: + +### 因此整个这一张图是一个组合控件, + + +```java + + + + + + + + +``` + +#### 上面是我们自定义的StepsViewIndicator, +#### 下面是我们展示的文字,因为是多个文字组合,我们下面应该是一个ViewGroup容器 + +### 分析: +* 如何做到居中显示 + + 1.首先得到该控件的宽度。 + + 2.其次得到当前控件距离最左边值。然后计算当前有几个圆,几个条线?这个是外部传递进来的,告诉该控件当前共有几个步骤,并且当前正在执行到哪一步? + + 当前控件距离最左边值,定义为:paddingLeft; + 当前控件的宽度:getWidth(); + 圆的半径:mCircleRadius; + 两条线之前的padding值:mLinePadding; + +这么说可能不怎么明白,举个‘栗子’。 + +1.假设当前共有一步: 接单。 +意味当前有一个圆,没有连线,得出paddingLeft + + float paddingLeft= (getWidth() - 1*(mCircleRadius*2)-0*mLinePadding)/2; + +2.假设当前共有二步:接单->打包 +意味当前有两个圆,之前有一条连线,得出paddingLeft + + float paddingLeft= (getWidth() - 2*(mCircleRadius*2)-1*mLinePadding)/2; +3.假设当前共有三步:接单->打包->出发 +意味当前有三个圆,之前有二条连线,得出paddingLeft + + float paddingLeft= (getWidth() - 3*(mCircleRadius*2)-2*mLinePadding)/2; + +4.假设当前共有四步:接单->打包->出发->送单 +意味当前有四个圆,之前有三条连线,得出paddingLeft + + float paddingLeft= (getWidth() - 4*(mCircleRadius*2)-3*mLinePadding)/2; + +5.假设当前共有五步:接单->打包->出发->送单->完成 + +意味着我当前有五个圆,五个圆中间有四条线相连接,这样我们可以得到五个圆的直径+四条线的长度,这样我们就可以得到最左边的paddingLeft的值: + + float paddingLeft= (getWidth() - 5*(mCircleRadius*2)-4*mLinePadding)/2; +综上所述: + 得出一个计算公式:其中mStepNum:当前控件所展示的步数。 + + float paddingLeft = (getWidth() - mStepNum * mCircleRadius * 2 - (mStepNum - 1) * mLinePadding) / 2; +所以,paddingLeft就可以动态展示出来,这样我们就可以知道所有步数对应圆的中心点的位置了:其中mComplectedXPosition为装所有圆中心点的集合。 +```java + for(int i = 0; i < mStepNum; i++) + { + //先计算全部最左边的padding值(getWidth()-(圆形直径+两圆之间距离)*2) + float paddingLeft = (getWidth() - mStepNum * mCircleRadius * 2 - (mStepNum - 1) * mLinePadding) / 2; + mComplectedXPosition.add(paddingLeft + mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding); + } +``` + +## Global graph 我们先来看下面这张动态全局预览图. +我们来看下全局预览图,当前StepView的展示是根据StepView的位置动态调整的。 + + + +是不是有了上面的小知识点的引导,这张图看起后,是不是思路就清晰许多了呢!是的,StepView本身就是有图片矩形和虚线绘制而成,下面我们进行拆分。 +一步步解析。 + + +### 第一步 init() 初始化 + +因为该view分为完成块和未完成块,因此,init()主要是在做一些初始化的信息设置 + +```java + private void init() + { + mPath = new Path(); + mEffects = new DashPathEffect(new float[]{8, 8, 8, 8}, 1); + + mComplectedXPosition = new ArrayList<>();//初始化 + //设置未完成mUnCompletedPaint的初始化设置 + mUnCompletedPaint = new Paint(); + mCompletedPaint = new Paint(); + mUnCompletedPaint.setAntiAlias(true); + mUnCompletedPaint.setColor(mUnCompletedLineColor); + mUnCompletedPaint.setStyle(Paint.Style.STROKE); + mUnCompletedPaint.setStrokeWidth(2); + + //设置完成mCompletedPaint的初始化设置 + mCompletedPaint.setAntiAlias(true); + mCompletedPaint.setColor(mCompletedLineColor); + mCompletedPaint.setStyle(Paint.Style.STROKE); + mCompletedPaint.setStrokeWidth(2); + mUnCompletedPaint.setPathEffect(mEffects); + mCompletedPaint.setStyle(Paint.Style.FILL); + . + . + . + } +``` + +* 定义已完成成线(矩形)mCompletedLineHeight的高度: + + mCompletedLineHeight = 0.05f * defaultStepIndicatorNum; +* 定义圆的半径: + mCircleRadius = 0.28f * defaultStepIndicatorNum; +* 定义线与线之前的间距 + mLinePadding = 0.85f * defaultStepIndicatorNum;//线与线之间的间距 +不要问我这线是怎么算出来的,我也是慢慢调出来的!!! + +* 定义三个状态的图片 + + mCompleteIcon = ContextCompat.getDrawable(getContext(), R.drawable.complted);//已经完成的icon + mAttentionIcon = ContextCompat.getDrawable(getContext(), R.drawable.attention);//正在进行的icon + mDefaultIcon = ContextCompat.getDrawable(getContext(), R.drawable.default_icon);//未完成的icon + +### 第二步 +* onMeasure() +哈哈,好熟悉的方法,这里的作用为了测量自身宽和高 + +```java + @Override + protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + int width = defaultStepIndicatorNum * 2; + if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(widthMeasureSpec)) + { + width = MeasureSpec.getSize(widthMeasureSpec); + } + int height = defaultStepIndicatorNum; + if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(heightMeasureSpec)) + { + height = Math.min(height, MeasureSpec.getSize(heightMeasureSpec)); + } + setMeasuredDimension(width, height); + } +``` + +### 第三步 onSizeChanged(int w, int h, int oldw, int oldh) +动态计算当前view的位置,这里的计算paddingLeft和mComplectedXPosition的方法已经在前面详细说明 + +```java + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) + { + super.onSizeChanged(w, h, oldw, oldh); + //获取中间的高度 + mCenterY = 0.5f * getHeight(); + //获取左上方Y的位置,获取该点的意义是为了方便画矩形左上的Y位置 + mLeftY = mCenterY - (mCompletedLineHeight / 2); + //获取右下方Y的位置,获取该点的意义是为了方便画矩形右下的Y位置 + mRightY = mCenterY + mCompletedLineHeight / 2; + + for(int i = 0; i < mStepNum; i++) + { + //先计算全部最左边的padding值(getWidth()-(圆形直径+两圆之间距离)*2) + float paddingLeft = (getWidth() - mStepNum * mCircleRadius * 2 - (mStepNum - 1) * mLinePadding) / 2; + mComplectedXPosition.add(paddingLeft + mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding); + } + //当位置发生改变时的回调监听 + mOnDrawListener.ondrawIndicator(); + } +``` +这里onSizeChanged()方法里取mLeftY,mRightY是为了方便之后画矩形。 + +### 第四步 protected synchronized void onDraw(Canvas canvas) +重重之重的方法来了,就会绘制该view所调用的方法,我们来看代码 + +```java + + @Override + protected synchronized void onDraw(Canvas canvas) + { + super.onDraw(canvas); + mUnCompletedPaint.setColor(mUnCompletedLineColor); + mCompletedPaint.setColor(mCompletedLineColor); + + //-----------------------画线--------------------------------------------------------------- + for(int i = 0; i < mComplectedXPosition.size() - 1; i++) + { + //前一个ComplectedXPosition + final float preComplectedXPosition = mComplectedXPosition.get(i); + //后一个ComplectedXPosition + final float afterComplectedXPosition = mComplectedXPosition.get(i + 1); + + if(i < mComplectingPosition)//判断在完成之前的所有点 + { + //判断在完成之前的所有点,画完成的线,这里是矩形 + canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); + } else + { + mPath.moveTo(preComplectedXPosition + mCircleRadius, mCenterY); + mPath.lineTo(afterComplectedXPosition - mCircleRadius, mCenterY); + canvas.drawPath(mPath, mUnCompletedPaint); + } + } + //-----------------------画线--------------------------------------------------------------- + + + //-----------------------画图标-------------------------------------------------------------- + for(int i = 0; i < mComplectedXPosition.size(); i++) + { + final float currentComplectedXPosition = mComplectedXPosition.get(i); + Rect rect = new Rect((int) (currentComplectedXPosition - mCircleRadius), (int) (mCenterY - mCircleRadius), (int) (currentComplectedXPosition + mCircleRadius), (int) (mCenterY + mCircleRadius)); + if(i < mComplectingPosition) + { + mCompleteIcon.setBounds(rect); + mCompleteIcon.draw(canvas); + } else if(i == mComplectingPosition && mComplectedXPosition.size() != 1) + { + mCompletedPaint.setColor(Color.WHITE); + canvas.drawCircle(currentComplectedXPosition, mCenterY, mCircleRadius * 1.1f, mCompletedPaint); + mAttentionIcon.setBounds(rect); + mAttentionIcon.draw(canvas); + } else + { + mDefaultIcon.setBounds(rect); + mDefaultIcon.draw(canvas); + } + } + //-----------------------画图标-------------------------------------------------------------- + } +``` + +我们来看,在onDraw()方法里,主要是做了两部分事情 +* 画线 +这里我们拿到前一个圆的位置preComplectedXPosition和后一个圆心的位置afterComplectedXPosition,然后进行判断,小于当前正在进行的点,画完成的线,我们这里用绘制矩形样式表示。大于当前正在进行的点,画虚线。 + +```java + + //-----------------------画线--------------------------------------------------------------- + for(int i = 0; i < mComplectedXPosition.size() - 1; i++) + { + //前一个ComplectedXPosition + final float preComplectedXPosition = mComplectedXPosition.get(i); + //后一个ComplectedXPosition + final float afterComplectedXPosition = mComplectedXPosition.get(i + 1); + + if(i < mComplectingPosition)//判断在完成之前的所有点 + { + //判断在完成之前的所有点,画完成的线,这里是矩形 + canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); + } else + { + mPath.moveTo(preComplectedXPosition + mCircleRadius, mCenterY); + mPath.lineTo(afterComplectedXPosition - mCircleRadius, mCenterY); + canvas.drawPath(mPath, mUnCompletedPaint); + } + } +``` +这里细心的小伙伴可能有注意到,为什么在画线的的时候,为什么canvas.drawRect的时候,左右会分别-10,+10 + + canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); +那是因为当画矩形时,线和圆之间的连接像是有缝隙,于是我就让矩形在往左边多画了10单位,在右边多画了10单位,这样他们看起来像是无缝连接一样。哈哈,但是这间距不能太大。 + + +* 画圆 +这里判断小于正在进行中的为则表示已经完成。并且刚好等于正在进行中的且不等于一表示正在进行中,大于则表示该步骤为完成,分别绘制图标。 + +```java + + //-----------------------画图标-------------------------------------------------------------- + for(int i = 0; i < mComplectedXPosition.size(); i++) + { + final float currentComplectedXPosition = mComplectedXPosition.get(i); + Rect rect = new Rect((int) (currentComplectedXPosition - mCircleRadius), (int) (mCenterY - mCircleRadius), (int) (currentComplectedXPosition + mCircleRadius), (int) (mCenterY + mCircleRadius)); + if(i < mComplectingPosition) + { + mCompleteIcon.setBounds(rect); + mCompleteIcon.draw(canvas); + } else if(i == mComplectingPosition && mComplectedXPosition.size() != 1) + { + mCompletedPaint.setColor(Color.WHITE); + canvas.drawCircle(currentComplectedXPosition, mCenterY, mCircleRadius * 1.1f, mCompletedPaint); + mAttentionIcon.setBounds(rect); + mAttentionIcon.draw(canvas); + } else + { + mDefaultIcon.setBounds(rect); + mDefaultIcon.draw(canvas); + } + } + //-----------------------画图标-------------------------------------------------------------- +``` + +## StepView +好了StepsViewIndicator是不是已经完全熟悉了呢,下面我们看StepView.StepView其实组合控件,设置其子控件的属性,包括颜色,position的状态...其中有一个方法我们来看下,就是对于设置TextView的。 + +```java + + @Override + public void ondrawIndicator() + { + List complectedXPosition = mStepsViewIndicator.getComplectedXPosition(); + if(mTexts != null) + { + for(int i = 0; i < mTexts.size(); i++) + { + TextView textView = new TextView(getContext()); + textView.setText(mTexts.get(i)); + textView.setX(complectedXPosition.get(i) - mStepsViewIndicator.getCircleRadius() - 10);//这里的-10是将文字进行调整居中,稍后再动态修改 + textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); + + if(i <= mComplectingPosition) + { + textView.setTypeface(null, Typeface.BOLD); + textView.setTextColor(mComplectedTextColor); + } else + { + textView.setTextColor(mUnComplectedTextColor); + } + + mTextContainer.addView(textView); + } + } + } +``` +这里的ondrawIndicator()方法是在StepsViewIndicator的onSizeChanged()引发的回调,来设置TextView + + +好了,其实到了这里,基本上也要接近尾声了.有了前面知识的积累,写VerticalStepView是不是就思路更加明确了呢?其实这个控件看起来‘很复杂’,翻了翻代码,看了也没有多大难度,小伙伴们,只要静下心来,花点时间研究下,发现,也就是那么回事,只要努力,就会有收货。 + +### VerticalStepView +这里就不在啰嗦的阐述VerticalStepView的原理啦,有了上面的HorizontalStepsViewIndicator的讲解,在来看看VerticalStepView应该是非常轻松的吧,好了,有想法的小伙伴何不尝试自己来写这个VerticalStepView,相信你可以的!!! + +* 【VerticalStepView参考地址】[VerticalStepView](https://github.com/baoyachi/StepView/blob/master/stepview/src/main/java/com/baoyachi/stepview/VerticalStepViewIndicator.java) diff --git a/README.md b/README.md index c6bb547..3f1582f 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,28 @@ -# StepView -Step by step,流程指示器。 + +# StepView [![](https://jitpack.io/v/baoyachi/StepView.svg)](https://jitpack.io/#baoyachi/StepView) +Step by step. Step indicator. Flow indicator。 + -##snapshot +## snapshot +#### like this:HorizontalStepView -##how to use +#### like this + + +#### also like this:VerticalStepView + + +Yeah,I am not working in JD,Just imitate.It's a joke .ha ha ha + + +It is looks like so beautiful. + + + +## how to use Add it in your root build.gradle at the end of repositories: @@ -15,1058 +31,142 @@ Add it in your root build.gradle at the end of repositories: maven { url "https://jitpack.io" } } Step 2. Add the dependency - + dependencies { - compile 'com.github.baoyachi:StepView:v1.0' + compile 'com.github.baoyachi:StepView:1.9' } - - + +### use HorizontalStepView + in xml ```java - ``` use code ```java -StepView setpview0 = (StepView) findViewById(R.id.step_view0); - List list0 = new ArrayList<>(); - list0.add("接单"); - list0.add("出发"); - list0.add("开始"); - list0.add("结束"); - list0.add("完成"); - setpview0.setStepsViewIndicatorComplectingPosition(2)//设置完成的步数 - .setStepViewTexts(list0)//总步骤 - .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 - .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 - .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 - .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 - .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon - .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon - .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon -``` -Use So Simple!!! - - - -##Introduction -现在,绝大部分公司对于一个项目订单流程控制不外乎从订单的初始状态到订单完成的状态,总结起来就是关于一个物体(订单/工单)状态变化的事物属性。所以就有了下面类似图片的效果,从订单的初始状态到订单完成。一个好的流程展示,对于工作效率的提高尤其的关键。该库代码看起来简洁,加上了详细的备注,看起来不会那么枯燥,也方便定制。那么废话不多说,直接进入正题。 - - -##preview -可能当前的StepView展示的点是动态的,有时候是两个,有时候是三个,有时候是四个甚至五个六个,之前有想过展示成下面的效果。 - - -但是当stepview的个数为2时效果太丑,一个距最左边,一个距左右边。能不忍,改吧,改了变成下面的效果 - - -上下对比下是不是好看了很多呢。 - -##What can be learned about this page -好了,我们通过这篇文章可以学习哪些知识呢? - -* 自定义控件的加强 -* Canvas,Paint的使用 -* 如何绘制矩形 -* 如何绘制虚线 -* 如何绘制圆 -* 加上小小的数学计算,哈哈,开个小玩笑,学过数学,应该不成问题! - -##start-pre -写这个开源项目前的热身 - -* 首先我们来画一个矩形 - -```java -public class RectView extends View - { - - public RectView(Context context) - { - super(context); - } - - @Override - protected void onDraw(Canvas canvas) - { - - super.onDraw(canvas); - setBackgroundResource(R.drawable.default_bg);//设置背景色 - - //----绘制矩形------------ - Paint paint = new Paint();// 定义画笔 - paint.setStyle(Paint.Style.FILL);//设置实心 - paint.setAntiAlias(true);// 消除锯齿 - paint.setColor(Color.WHITE);//设置画笔颜色 - paint.setStrokeWidth(40);// 设置paint的外框宽度 - canvas.drawRect(200, 200, 800, 220, paint);//绘制矩形 - //----绘制矩形------------ - } - } -} -``` -如下图:绘制矩形,因为绘制矩形需要知道左上又下四个点的坐标。 -我们设置好四个点的坐标,绘制如下图 - - -接上面绘制圆 - - -```java - //----绘制圆--------------------- - canvas.drawCircle(350, 350, 100, paint); - //----绘制圆--------------------- -``` -因为绘制圆需要圆点和半径,定义好后,展示如下: - - - -接着绘制虚线 - -```java - //----绘制虚线--------------------- - Paint pathPaint = new Paint(); - pathPaint.setAntiAlias(true); - pathPaint.setColor(Color.WHITE); - pathPaint.setStyle(Paint.Style.STROKE); - pathPaint.setStrokeWidth(2); - DashPathEffect mEffects = new DashPathEffect(new float[]{8, 8, 8, 8}, 1); - Path path = new Path(); - path.moveTo(200, 600); - path.lineTo(800, 600); - pathPaint.setPathEffect(mEffects); - canvas.drawPath(path, pathPaint); - //----绘制虚线--------------------- - } - } -``` -这里用到一个新控件 - -DashPathEffect:DashPathEffect是PathEffect类的一个子类,可以使paint画出类似虚线的样子,并且可以任意指定虚实的排列方式. -好了,我们通过canvas.drawPath(path, pathPaint)绘制如下图 - - -难点说完了,我们就开始我们的项目吧。 - - - -##构成 -我们拿这个局部图来做栗子: - -###因此整个这一张图是一个组合控件, - - -```java - - - - - - - - -``` - -####上面是我们自定义的StepsViewIndicator, -####下面是我们展示的文字,因为是多个文字组合,我们下面应该是一个ViewGroup容器 - -###分析: -* 如何做到居中显示 - - 1.首先得到该控件的宽度。 - - 2.其次得到当前控件距离最左边值。然后计算当前有几个圆,几个条线?这个是外部传递进来的,告诉该控件当前共有几个步骤,并且当前正在执行到哪一步? - - 当前控件距离最左边值,定义为:paddingLeft; - 当前控件的宽度:getWidth(); - 圆的半径:mCircleRadius; - 两条线之前的padding值:mLinePadding; - -这么说可能不怎么明白,举个‘栗子’。 - -1.假设当前共有一步: 接单。 -意味当前有一个圆,没有连线,得出paddingLeft - - float paddingLeft= getWidth() - 1*(mCircleRadius*2)-0*mLinePadding; - -2.假设当前共有二步:接单->打包 -意味当前有两个圆,之前有一条连线,得出paddingLeft - - float paddingLeft= getWidth() - 2*(mCircleRadius*2)-1*mLinePadding; -3.假设当前共有三步:接单->打包->出发 -意味当前有三个圆,之前有二条连线,得出paddingLeft - - float paddingLeft= getWidth() - 3*(mCircleRadius*2)-2*mLinePadding; - -4.假设当前共有四步:接单->打包->出发->送单 -意味当前有四个圆,之前有三条连线,得出paddingLeft - - float paddingLeft= getWidth() - 4*(mCircleRadius*2)-3*mLinePadding; - -5.假设当前共有五步:接单->打包->出发->送单->完成 - -意味着我当前有五个圆,五个圆中间有四条线相连接,这样我们可以得到五个圆的直径+四条线的长度,这样我们就可以得到最左边的paddingLeft的值: - - float paddingLeft= getWidth() - 5*(mCircleRadius*2)-4*mLinePadding; -综上所述: - 得出一个计算公式:其中mStepNum:当前控件所展示的步数。 - - float paddingLeft = (getWidth() - mStepNum * mCircleRadius * 2 - (mStepNum - 1) * mLinePadding) / 2; -所以,paddingLeft就可以动态展示出来,这样我们就可以知道所有步数对应圆的中心点的位置了:其中mComplectedXPosition为装所有圆中心点的集合。 -```java - for(int i = 0; i < mStepNum; i++) - { - //先计算全部最左边的padding值(getWidth()-(圆形直径+两圆之间距离)*2) - float paddingLeft = (getWidth() - mStepNum * mCircleRadius * 2 - (mStepNum - 1) * mLinePadding) / 2; - mComplectedXPosition.add(paddingLeft + mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding); - } -``` - -##Global graph 我们先来看下面这张动态全局预览图. -我们来看下全局预览图,当前StepView的展示是根据StepView的位置动态调整的。 - - -是不是有了上面的小知识点的引导,这张图看起后,是不是思路就清晰许多了呢!是的,StepView本身就是有图片矩形和虚线绘制而成,下面我们进行拆分。 -一步步解析。 - - -###第一步 init() 初始化 - -因为该view分为完成块和未完成块,因此,init()主要是在做一些初始化的信息设置 - -```java - private void init() - { - mPath = new Path(); - mEffects = new DashPathEffect(new float[]{8, 8, 8, 8}, 1); - - mComplectedXPosition = new ArrayList<>();//初始化 - //设置未完成mUnCompletedPaint的初始化设置 - mUnCompletedPaint = new Paint(); - mCompletedPaint = new Paint(); - mUnCompletedPaint.setAntiAlias(true); - mUnCompletedPaint.setColor(mUnCompletedLineColor); - mUnCompletedPaint.setStyle(Paint.Style.STROKE); - mUnCompletedPaint.setStrokeWidth(2); - - //设置完成mCompletedPaint的初始化设置 - mCompletedPaint.setAntiAlias(true); - mCompletedPaint.setColor(mCompletedLineColor); - mCompletedPaint.setStyle(Paint.Style.STROKE); - mCompletedPaint.setStrokeWidth(2); - mUnCompletedPaint.setPathEffect(mEffects); - mCompletedPaint.setStyle(Paint.Style.FILL); - . - . - . - } -``` - -* 定义已完成成线(矩形)mCompletedLineHeight的高度: - - mCompletedLineHeight = 0.05f * defaultStepIndicatorNum; -* 定义圆的半径: - mCircleRadius = 0.28f * defaultStepIndicatorNum; -* 定义线与线之前的间距 - mLinePadding = 0.85f * defaultStepIndicatorNum;//线与线之间的间距 -不要问我这线是怎么算出来的,我也是慢慢调出来的!!! - -* 定义三个状态的图片 - - mCompleteIcon = ContextCompat.getDrawable(getContext(), R.drawable.complted);//已经完成的icon - mAttentionIcon = ContextCompat.getDrawable(getContext(), R.drawable.attention);//正在进行的icon - mDefaultIcon = ContextCompat.getDrawable(getContext(), R.drawable.default_icon);//未完成的icon - -###第二步 -* onMeasure() -哈哈,好熟悉的方法,这里的作用为了测量自身宽和高 - -```java - @Override - protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) - { - int width = defaultStepIndicatorNum * 2; - if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(widthMeasureSpec)) - { - width = MeasureSpec.getSize(widthMeasureSpec); - } - int height = defaultStepIndicatorNum; - if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(heightMeasureSpec)) - { - height = Math.min(height, MeasureSpec.getSize(heightMeasureSpec)); - } - setMeasuredDimension(width, height); - } -``` - -###第三步 onSizeChanged(int w, int h, int oldw, int oldh) -动态计算当前view的位置,这里的计算paddingLeft和mComplectedXPosition的方法已经在前面详细说明 - -```java - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) - { - super.onSizeChanged(w, h, oldw, oldh); - //获取中间的高度 - mCenterY = 0.5f * getHeight(); - //获取左上方Y的位置,获取该点的意义是为了方便画矩形左上的Y位置 - mLeftY = mCenterY - (mCompletedLineHeight / 2); - //获取右下方Y的位置,获取该点的意义是为了方便画矩形右下的Y位置 - mRightY = mCenterY + mCompletedLineHeight / 2; - - for(int i = 0; i < mStepNum; i++) - { - //先计算全部最左边的padding值(getWidth()-(圆形直径+两圆之间距离)*2) - float paddingLeft = (getWidth() - mStepNum * mCircleRadius * 2 - (mStepNum - 1) * mLinePadding) / 2; - mComplectedXPosition.add(paddingLeft + mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding); - } - //当位置发生改变时的回调监听 - mOnDrawListener.ondrawIndicator(); - } -``` -这里onSizeChanged()方法里取mLeftY,mRightY是为了方便之后画矩形。 - -###第四步 protected synchronized void onDraw(Canvas canvas) -重重之重的方法来了,就会绘制该view所调用的方法,我们来看代码 - -```java - - @Override - protected synchronized void onDraw(Canvas canvas) - { - super.onDraw(canvas); - mUnCompletedPaint.setColor(mUnCompletedLineColor); - mCompletedPaint.setColor(mCompletedLineColor); - - //-----------------------画线--------------------------------------------------------------- - for(int i = 0; i < mComplectedXPosition.size() - 1; i++) - { - //前一个ComplectedXPosition - final float preComplectedXPosition = mComplectedXPosition.get(i); - //后一个ComplectedXPosition - final float afterComplectedXPosition = mComplectedXPosition.get(i + 1); - - if(i < mComplectingPosition)//判断在完成之前的所有点 - { - //判断在完成之前的所有点,画完成的线,这里是矩形 - canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); - } else - { - mPath.moveTo(preComplectedXPosition + mCircleRadius, mCenterY); - mPath.lineTo(afterComplectedXPosition - mCircleRadius, mCenterY); - canvas.drawPath(mPath, mUnCompletedPaint); - } - } - //-----------------------画线--------------------------------------------------------------- - - - //-----------------------画图标-------------------------------------------------------------- - for(int i = 0; i < mComplectedXPosition.size(); i++) - { - final float currentComplectedXPosition = mComplectedXPosition.get(i); - Rect rect = new Rect((int) (currentComplectedXPosition - mCircleRadius), (int) (mCenterY - mCircleRadius), (int) (currentComplectedXPosition + mCircleRadius), (int) (mCenterY + mCircleRadius)); - if(i < mComplectingPosition) - { - mCompleteIcon.setBounds(rect); - mCompleteIcon.draw(canvas); - } else if(i == mComplectingPosition && mComplectedXPosition.size() != 1) - { - mCompletedPaint.setColor(Color.WHITE); - canvas.drawCircle(currentComplectedXPosition, mCenterY, mCircleRadius * 1.1f, mCompletedPaint); - mAttentionIcon.setBounds(rect); - mAttentionIcon.draw(canvas); - } else - { - mDefaultIcon.setBounds(rect); - mDefaultIcon.draw(canvas); - } - } - //-----------------------画图标-------------------------------------------------------------- - } -``` - -我们来看,在onDraw()方法里,主要是做了两部分事情 -* 画线 -这里我们拿到前一个圆的位置preComplectedXPosition和后一个圆心的位置afterComplectedXPosition,然后进行判断,小于当前正在进行的点,画完成的线,我们这里用绘制矩形样式表示。大于当前正在进行的点,画虚线。 - -```java - - //-----------------------画线--------------------------------------------------------------- - for(int i = 0; i < mComplectedXPosition.size() - 1; i++) - { - //前一个ComplectedXPosition - final float preComplectedXPosition = mComplectedXPosition.get(i); - //后一个ComplectedXPosition - final float afterComplectedXPosition = mComplectedXPosition.get(i + 1); - - if(i < mComplectingPosition)//判断在完成之前的所有点 - { - //判断在完成之前的所有点,画完成的线,这里是矩形 - canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); - } else - { - mPath.moveTo(preComplectedXPosition + mCircleRadius, mCenterY); - mPath.lineTo(afterComplectedXPosition - mCircleRadius, mCenterY); - canvas.drawPath(mPath, mUnCompletedPaint); - } - } -``` -这里细心的小伙伴可能有注意到,为什么在画线的的时候,为什么canvas.drawRect的时候,左右会分别-10,+10 - - canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); -那是因为当画矩形时,线和圆之间的连接像是有缝隙,于是我就让矩形在往左边多画了10单位,在右边多画了10单位,这样他们看起来像是无缝连接一样。哈哈,但是这间距不能太大。 - - -* 画圆 -这里判断小于正在进行中的为则表示已经完成。并且刚好等于正在进行中的且不等于一表示正在进行中,大于则表示该步骤为完成,分别绘制图标。 - -```java - - //-----------------------画图标-------------------------------------------------------------- - for(int i = 0; i < mComplectedXPosition.size(); i++) - { - final float currentComplectedXPosition = mComplectedXPosition.get(i); - Rect rect = new Rect((int) (currentComplectedXPosition - mCircleRadius), (int) (mCenterY - mCircleRadius), (int) (currentComplectedXPosition + mCircleRadius), (int) (mCenterY + mCircleRadius)); - if(i < mComplectingPosition) - { - mCompleteIcon.setBounds(rect); - mCompleteIcon.draw(canvas); - } else if(i == mComplectingPosition && mComplectedXPosition.size() != 1) - { - mCompletedPaint.setColor(Color.WHITE); - canvas.drawCircle(currentComplectedXPosition, mCenterY, mCircleRadius * 1.1f, mCompletedPaint); - mAttentionIcon.setBounds(rect); - mAttentionIcon.draw(canvas); - } else - { - mDefaultIcon.setBounds(rect); - mDefaultIcon.draw(canvas); - } - } - //-----------------------画图标-------------------------------------------------------------- -``` - - - - -###StepsViewIndicator的其他方法 -```java - /** - * 得到所有圆点所在的位置 - * - * @return - */ - public List getComplectedXPosition() - { - return mComplectedXPosition; - } - - /** - * 设置流程步数 - * - * @param stepNum 流程步数 - */ - public void setStepNum(int stepNum) - { - this.mStepNum = stepNum; - invalidate(); - } - - /** - * 设置正在进行position - * - * @param complectingPosition - */ - public void setComplectingPosition(int complectingPosition) - { - this.mComplectingPosition = complectingPosition; - invalidate(); - } - - /** - * 设置未完成线的颜色 - * - * @param unCompletedLineColor - */ - public void setUnCompletedLineColor(int unCompletedLineColor) - { - this.mUnCompletedLineColor = unCompletedLineColor; - } - - /** - * 设置已完成线的颜色 - * - * @param completedLineColor - */ - public void setCompletedLineColor(int completedLineColor) - { - this.mCompletedLineColor = completedLineColor; - } - - /** - * 设置默认图片 - * - * @param defaultIcon - */ - public void setDefaultIcon(Drawable defaultIcon) - { - this.mDefaultIcon = defaultIcon; - } - - /** - * 设置已完成图片 - * @param completeIcon - */ - public void setCompleteIcon(Drawable completeIcon) - { - this.mCompleteIcon = completeIcon; - } - - /** - * 设置正在进行中的图片 - * @param attentionIcon - */ - public void setAttentionIcon(Drawable attentionIcon) - { - this.mAttentionIcon = attentionIcon; - } -``` - - -##StepsViewIndicator (全部代码) -```java -public class StepsViewIndicator extends View -{ - - //定义默认的高度 - private int defaultStepIndicatorNum = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()); - - private float mCompletedLineHeight;//完成线的高度 - private float mCircleRadius;//圆的半径 - - private Drawable mCompleteIcon;//完成的默认图片 - private Drawable mAttentionIcon;//正在进行的默认图片 - private Drawable mDefaultIcon;//默认的背景图 - private float mCenterY;//该view的中间位置 - private float mLeftY;//左上方的Y位置 - private float mRightY;//右下方的位置 - - private int mStepNum = 0;//当前有几部流程 - private float mLinePadding; - - private List mComplectedXPosition;//定义完成时当前view在左边的位置 - private Paint mUnCompletedPaint;//未完成Paint - private Paint mCompletedPaint;//完成paint - private int mUnCompletedLineColor = ContextCompat.getColor(getContext(), R.color.uncompleted_color);//定义默认未完成线的颜色 - private int mCompletedLineColor = Color.WHITE;//定义默认完成线的颜色 - private PathEffect mEffects; - - private int mComplectingPosition;//正在进行position - private Path mPath; - - private OnDrawIndicatorListener mOnDrawListener; - - /** - * 设置监听 - * - * @param onDrawListener - */ - public void setOnDrawListener(OnDrawIndicatorListener onDrawListener) - { - mOnDrawListener = onDrawListener; - } - - /** - * get小圆的半径 - * +HorizontalStepView setpview5 = (HorizontalStepView) mView.findViewById(R.id.step_view5); + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",1); + StepBean stepBean2 = new StepBean("出发",1); + StepBean stepBean3 = new StepBean("送单",0); + StepBean stepBean4 = new StepBean("完成",-1); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + stepsBeanList.add(stepBean2); + stepsBeanList.add(stepBean3); + stepsBeanList.add(stepBean4); + + + setpview5 + .setStepViewTexts(stepsBeanList)//总步骤 + .setTextSize(12)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon +``` +### use VerticalStepView +this widget can reverse or forward draw,please look at below jd express picture + + + +this status is reverse draw,so ,wo also have a method can realize jd express effect +like this: + + +```javass + /** + * is reverse draw 是否倒序画 + * + * @param isReverSe default is true * @return */ - public float getCircleRadius() - { - return mCircleRadius; - } - - public StepsViewIndicator(Context context) - { - this(context, null); - } - - public StepsViewIndicator(Context context, AttributeSet attrs) - { - this(context, attrs, 0); - } - - public StepsViewIndicator(Context context, AttributeSet attrs, int defStyle) - { - super(context, attrs, defStyle); - init(); - } - - /** - * init - */ - private void init() + public VerticalStepView reverseDraw(boolean isReverSe) { - mPath = new Path(); - mEffects = new DashPathEffect(new float[]{8, 8, 8, 8}, 1); - - mComplectedXPosition = new ArrayList<>();//初始化 - - mUnCompletedPaint = new Paint(); - mCompletedPaint = new Paint(); - mUnCompletedPaint.setAntiAlias(true); - mUnCompletedPaint.setColor(mUnCompletedLineColor); - mUnCompletedPaint.setStyle(Paint.Style.STROKE); - mUnCompletedPaint.setStrokeWidth(2); - - mCompletedPaint.setAntiAlias(true); - mCompletedPaint.setColor(mCompletedLineColor); - mCompletedPaint.setStyle(Paint.Style.STROKE); - mCompletedPaint.setStrokeWidth(2); - - mUnCompletedPaint.setPathEffect(mEffects); - mCompletedPaint.setStyle(Paint.Style.FILL); - - //已经完成线的宽高 - mCompletedLineHeight = 0.05f * defaultStepIndicatorNum; - //圆的半径 - mCircleRadius = 0.28f * defaultStepIndicatorNum; - //线与线之间的间距 - mLinePadding = 0.85f * defaultStepIndicatorNum; - - mCompleteIcon = ContextCompat.getDrawable(getContext(), R.drawable.complted);//已经完成的icon - mAttentionIcon = ContextCompat.getDrawable(getContext(), R.drawable.attention);//正在进行的icon - mDefaultIcon = ContextCompat.getDrawable(getContext(), R.drawable.default_icon);//未完成的icon - } - - @Override - protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) - { - int width = defaultStepIndicatorNum * 2; - if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(widthMeasureSpec)) - { - width = MeasureSpec.getSize(widthMeasureSpec); - } - int height = defaultStepIndicatorNum; - if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(heightMeasureSpec)) - { - height = Math.min(height, MeasureSpec.getSize(heightMeasureSpec)); - } - setMeasuredDimension(width, height); - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) - { - super.onSizeChanged(w, h, oldw, oldh); - //获取中间的高度 - mCenterY = 0.5f * getHeight(); - //获取左上方Y的位置,获取该点的意义是为了方便画矩形左上的Y位置 - mLeftY = mCenterY - (mCompletedLineHeight / 2); - //获取右下方Y的位置,获取该点的意义是为了方便画矩形右下的Y位置 - mRightY = mCenterY + mCompletedLineHeight / 2; - - for(int i = 0; i < mStepNum; i++) - { - //先计算全部最左边的padding值(getWidth()-(圆形直径+两圆之间距离)*2) - float paddingLeft = (getWidth() - mStepNum * mCircleRadius * 2 - (mStepNum - 1) * mLinePadding) / 2; - mComplectedXPosition.add(paddingLeft + mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding); - } - - mOnDrawListener.ondrawIndicator(); - } - - @Override - protected synchronized void onDraw(Canvas canvas) - { - super.onDraw(canvas); - mUnCompletedPaint.setColor(mUnCompletedLineColor); - mCompletedPaint.setColor(mCompletedLineColor); - - //-----------------------画线--------------------------------------------------------------- - for(int i = 0; i < mComplectedXPosition.size() - 1; i++) - { - //前一个ComplectedXPosition - final float preComplectedXPosition = mComplectedXPosition.get(i); - //后一个ComplectedXPosition - final float afterComplectedXPosition = mComplectedXPosition.get(i + 1); - - if(i < mComplectingPosition)//判断在完成之前的所有点 - { - //判断在完成之前的所有点,画完成的线,这里是矩形 - canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); - } else - { - mPath.moveTo(preComplectedXPosition + mCircleRadius, mCenterY); - mPath.lineTo(afterComplectedXPosition - mCircleRadius, mCenterY); - canvas.drawPath(mPath, mUnCompletedPaint); - } - } - //-----------------------画线--------------------------------------------------------------- - - - //-----------------------画图标-------------------------------------------------------------- - for(int i = 0; i < mComplectedXPosition.size(); i++) - { - final float currentComplectedXPosition = mComplectedXPosition.get(i); - Rect rect = new Rect((int) (currentComplectedXPosition - mCircleRadius), (int) (mCenterY - mCircleRadius), (int) (currentComplectedXPosition + mCircleRadius), (int) (mCenterY + mCircleRadius)); - if(i < mComplectingPosition) - { - mCompleteIcon.setBounds(rect); - mCompleteIcon.draw(canvas); - } else if(i == mComplectingPosition && mComplectedXPosition.size() != 1) - { - mCompletedPaint.setColor(Color.WHITE); - canvas.drawCircle(currentComplectedXPosition, mCenterY, mCircleRadius * 1.1f, mCompletedPaint); - mAttentionIcon.setBounds(rect); - mAttentionIcon.draw(canvas); - } else - { - mDefaultIcon.setBounds(rect); - mDefaultIcon.draw(canvas); - } - } - //-----------------------画图标-------------------------------------------------------------- - } - - /** - * 得到所有圆点所在的位置 - * - * @return - */ - public List getComplectedXPosition() - { - return mComplectedXPosition; - } - - /** - * 设置流程步数 - * - * @param stepNum 流程步数 - */ - public void setStepNum(int stepNum) - { - this.mStepNum = stepNum; - invalidate(); - } - - /** - * 设置正在进行position - * - * @param complectingPosition - */ - public void setComplectingPosition(int complectingPosition) - { - this.mComplectingPosition = complectingPosition; - invalidate(); - } - - /** - * 设置未完成线的颜色 - * - * @param unCompletedLineColor - */ - public void setUnCompletedLineColor(int unCompletedLineColor) - { - this.mUnCompletedLineColor = unCompletedLineColor; - } - - /** - * 设置已完成线的颜色 - * - * @param completedLineColor - */ - public void setCompletedLineColor(int completedLineColor) - { - this.mCompletedLineColor = completedLineColor; - } - - /** - * 设置默认图片 - * - * @param defaultIcon - */ - public void setDefaultIcon(Drawable defaultIcon) - { - this.mDefaultIcon = defaultIcon; - } - - /** - * 设置已完成图片 - * @param completeIcon - */ - public void setCompleteIcon(Drawable completeIcon) - { - this.mCompleteIcon = completeIcon; - } - - /** - * 设置正在进行中的图片 - * @param attentionIcon - */ - public void setAttentionIcon(Drawable attentionIcon) - { - this.mAttentionIcon = attentionIcon; - } - - - /** - * 设置对view监听 - */ - public interface OnDrawIndicatorListener - { - void ondrawIndicator(); + this.mStepsViewIndicator.reverseDraw(isReverSe); + return this; } -} ``` +you can use this method can realize reverse draw;Also you can see exmaple[MainActivity](https://github.com/baoyachi/StepView/blob/master/app/src/main/java/com/baoyachi/stepview/demo/MainActivity.java),this example has detail useful description; -##StepView -好了StepsViewIndicator是不是已经完全熟悉了呢,下面我们看StepView.StepView其实组合控件,设置其子控件的属性,包括颜色,position的状态...其中有一个方法我们来看下,就是对于设置TextView的。 +in xml ```java - - @Override - public void ondrawIndicator() - { - List complectedXPosition = mStepsViewIndicator.getComplectedXPosition(); - if(mTexts != null) - { - for(int i = 0; i < mTexts.size(); i++) - { - TextView textView = new TextView(getContext()); - textView.setText(mTexts.get(i)); - textView.setX(complectedXPosition.get(i) - mStepsViewIndicator.getCircleRadius() - 10);//这里的-10是将文字进行调整居中,稍后再动态修改 - textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - - if(i <= mComplectingPosition) - { - textView.setTypeface(null, Typeface.BOLD); - textView.setTextColor(mComplectedTextColor); - } else - { - textView.setTextColor(mUnComplectedTextColor); - } - - mTextContainer.addView(textView); - } - } - } + ``` -这里的ondrawIndicator()方法是在StepsViewIndicator的onSizeChanged()引发的回调,来设置TextView +in code -##StepView全部代码 ```java -public class StepView extends LinearLayout implements StepsViewIndicator.OnDrawIndicatorListener -{ - - private RelativeLayout mTextContainer; - private StepsViewIndicator mStepsViewIndicator; - private List mTexts; - private int mComplectingPosition; - private int mUnComplectedTextColor = ContextCompat.getColor(getContext(), R.color.uncompleted_text_color);//定义默认未完成文字的颜色; - private int mComplectedTextColor = ContextCompat.getColor(getContext(), android.R.color.white);//定义默认完成文字的颜色; - - - public StepView(Context context) - { - this(context, null); - } - - public StepView(Context context, AttributeSet attrs) - { - this(context, attrs, 0); - } - - public StepView(Context context, AttributeSet attrs, int defStyleAttr) - { - super(context, attrs, defStyleAttr); - init(); - } - - private void init() - { - View rootView = LayoutInflater.from(getContext()).inflate(R.layout.widget_stepsview, this); - mStepsViewIndicator = (StepsViewIndicator) rootView.findViewById(R.id.steps_indicator); - mStepsViewIndicator.setOnDrawListener(this); - mTextContainer = (RelativeLayout) rootView.findViewById(R.id.rl_text_container); - mTextContainer.removeAllViews(); - } - - /** - * 设置显示的文字 - * - * @param texts - * @return - */ - public StepView setStepViewTexts(List texts) - { - mTexts = texts; - mStepsViewIndicator.setStepNum(mTexts.size()); - return this; - } - - /** - * 设置正在进行的position - * - * @param complectingPosition - * @return - */ - public StepView setStepsViewIndicatorComplectingPosition(int complectingPosition) - { - mComplectingPosition = complectingPosition; - mStepsViewIndicator.setComplectingPosition(complectingPosition); - return this; - } - - /** - * 设置未完成文字的颜色 - * - * @param unComplectedTextColor - * @return - */ - public StepView setStepViewUnComplectedTextColor(int unComplectedTextColor) - { - mUnComplectedTextColor = unComplectedTextColor; - return this; - } - /** - * 设置完成文字的颜色 - * - * @param complectedTextColor - * @return - */ - public StepView setStepViewComplectedTextColor(int complectedTextColor) - { - this.mComplectedTextColor = complectedTextColor; - return this; - } +mSetpview0 = (VerticalStepView) findViewById(R.id.step_view0); - /** - * 设置StepsViewIndicator未完成线的颜色 - * - * @param unCompletedLineColor - * @return - */ - public StepView setStepsViewIndicatorUnCompletedLineColor(int unCompletedLineColor) - { - mStepsViewIndicator.setUnCompletedLineColor(unCompletedLineColor); - return this; - } - - /** - * 设置StepsViewIndicator完成线的颜色 - * - * @param completedLineColor - * @return - */ - public StepView setStepsViewIndicatorCompletedLineColor(int completedLineColor) - { - mStepsViewIndicator.setCompletedLineColor(completedLineColor); - return this; - } - - /** - * 设置StepsViewIndicator默认图片 - * - * @param defaultIcon - */ - public StepView setStepsViewIndicatorDefaultIcon(Drawable defaultIcon) - { - mStepsViewIndicator.setDefaultIcon(defaultIcon); - return this; - } - - /** - * 设置StepsViewIndicator已完成图片 - * - * @param completeIcon - */ - public StepView setStepsViewIndicatorCompleteIcon(Drawable completeIcon) - { - mStepsViewIndicator.setCompleteIcon(completeIcon); - return this; - } - - /** - * 设置StepsViewIndicator正在进行中的图片 - * - * @param attentionIcon - */ - public StepView setStepsViewIndicatorAttentionIcon(Drawable attentionIcon) - { - mStepsViewIndicator.setAttentionIcon(attentionIcon); - return this; - } + List list0 = new ArrayList<>(); + list0.add("接已提交定案,等待系统确认"); + list0.add("您的商品需要从外地调拨,我们会尽快处理,请耐心等待"); + list0.add("您的订单已经进入亚洲第一仓储中心1号库准备出库"); + list0.add("您的订单预计6月23日送达您的手中,618期间促销火爆,可能影响送货时间,请您谅解,我们会第一时间送到您的手中"); + list0.add("您的订单已打印完毕"); + list0.add("您的订单已拣货完成"); + list0.add("扫描员已经扫描"); + list0.add("打包成功"); + list0.add("配送员【包牙齿】已出发,联系电话【130-0000-0000】,感谢您的耐心等待,参加评价还能赢取好多礼物哦"); + list0.add("感谢你在京东购物,欢迎你下次光临!"); + mSetpview0.setStepsViewIndicatorComplectingPosition(list0.size() - 2)//设置完成的步数 + .reverseDraw(false)//default is true + .setStepViewTexts(list0)//总步骤 + .setLinePaddingProportion(0.85f)//设置indicator线与线间距的比例系数 + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon +``` +Use So Simple!!! - @Override - public void ondrawIndicator() - { - List complectedXPosition = mStepsViewIndicator.getComplectedXPosition(); - if(mTexts != null) - { - for(int i = 0; i < mTexts.size(); i++) - { - TextView textView = new TextView(getContext()); - textView.setText(mTexts.get(i)); - textView.setX(complectedXPosition.get(i) - mStepsViewIndicator.getCircleRadius() - 10);//这里的-10是将文字进行调整居中,稍后再动态修改 - textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); +## See Detail - if(i <= mComplectingPosition) - { - textView.setTypeface(null, Typeface.BOLD); - textView.setTextColor(mComplectedTextColor); - } else - { - textView.setTextColor(mUnComplectedTextColor); - } +> [详细链接请点击](Introduction.md) - mTextContainer.addView(textView); - } - } - } -} -``` -好了,其实到了这里,基本上也要接近尾声了,其实这个控件看起来‘很复杂’,翻了翻代码,看了也没有多大难度,小伙伴们,只要静下心来,花点时间研究下,发现,也就是那么回事,只要努力,就会有收货。 -###参考链接 +### 参考链接 [Android-StepsView](https://github.com/anton46/Android-StepsView) -##Thanks +## Thanks * 感谢 [iconfont](http://iconfont.cn/) 提供的图片资源 * 感谢 [anton46](https://github.com/anton46/) 提供的源码作参考 -###图片来源 +### 图片来源 * [step](http://iconfont.cn/search?q=step) * [complted](http://iconfont.cn/search?q=right) * [attention](http://iconfont.cn/search?q=attention) * [default-icon](http://iconfont.cn/search?q=default) -##End +## End 喜欢这个控件的小伙伴可以点击star哦! +## Contact us +* 【简书】[包牙齿](http://www.jianshu.com/users/7096f185d063/) +* 【微博】[包牙齿](http://weibo.com/baoyachi) diff --git a/app/build.gradle b/app/build.gradle index 23252d1..3d71004 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,5 +23,5 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' - compile 'com.github.baoyachi:StepView:v1.0' + compile project(':stepview') } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed9dfe4..4a13102 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,9 +15,7 @@ - - - + \ No newline at end of file diff --git a/app/src/main/java/com/baoyachi/stepview/demo/MainActivity.java b/app/src/main/java/com/baoyachi/stepview/demo/MainActivity.java index eae7be1..9804be9 100644 --- a/app/src/main/java/com/baoyachi/stepview/demo/MainActivity.java +++ b/app/src/main/java/com/baoyachi/stepview/demo/MainActivity.java @@ -1,192 +1,78 @@ package com.baoyachi.stepview.demo; +import android.app.FragmentTransaction; import android.content.Intent; import android.os.Bundle; -import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; -import com.baoyachi.stepview.StepView; - -import java.util.ArrayList; -import java.util.List; +import com.baoyachi.stepview.demo.fragment.DrawCanvasFragment; +import com.baoyachi.stepview.demo.fragment.HorizontalStepviewFragment; +import com.baoyachi.stepview.demo.fragment.VerticalStepViewReverseFragment; +import com.baoyachi.stepview.demo.fragment.VerticalStepViewFrowardFragment; /** * 日期:16/6/22 16:01 - *

+ *

* 描述: */ public class MainActivity extends AppCompatActivity { + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - showSetpView0(); - showSetpView1(); - showSetpView2(); - showSetpView3(); - showSetpView4(); - showSetpView5(); - showSetpView6(); - } - - private void showSetpView0() - { - StepView setpview0 = (StepView) findViewById(R.id.step_view0); - List list0 = new ArrayList<>(); - list0.add("接单"); - list0.add("打包"); - list0.add("出发"); - list0.add("送单"); - list0.add("完成"); - list0.add("支付"); - setpview0.setStepsViewIndicatorComplectingPosition(2)//设置完成的步数 - .setStepViewTexts(list0)//总步骤 - .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 - .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 - .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 - .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 - .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon - .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon - .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon - } - - - private void showSetpView1() - { - List list1 = new ArrayList<>(); - list1.add("接单"); - StepView setpview1 = (StepView) findViewById(R.id.step_view1); - setpview1.setStepsViewIndicatorComplectingPosition(0)//设置完成的步数 - .setStepViewTexts(list1)//总步骤 - .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 - .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 - .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 - .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 - .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon - .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon - .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon - } - - private void showSetpView2() - { - List list2 = new ArrayList<>(); - list2.add("接单"); - list2.add("打包"); - StepView setpview2 = (StepView) findViewById(R.id.step_view2); - setpview2.setStepsViewIndicatorComplectingPosition(0)//设置完成的步数 - .setStepViewTexts(list2)//总步骤 - .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 - .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 - .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 - .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 - .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon - .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon - .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon - } - - private void showSetpView3() - { - List list3 = new ArrayList<>(); - list3.add("接单"); - list3.add("打包"); - list3.add("出发"); - StepView setpview3 = (StepView) findViewById(R.id.step_view3); - setpview3.setStepsViewIndicatorComplectingPosition(1)//设置完成的步数 - .setStepViewTexts(list3)//总步骤 - .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 - .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 - .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 - .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 - .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon - .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon - .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon - } - - private void showSetpView4() - { - List list4 = new ArrayList<>(); - list4.add("接单"); - list4.add("打包"); - list4.add("出发"); - list4.add("送单"); - StepView setpview4 = (StepView) findViewById(R.id.step_view4); - setpview4.setStepsViewIndicatorComplectingPosition(2)//设置完成的步数 - .setStepViewTexts(list4)//总步骤 - .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 - .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 - .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 - .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 - .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon - .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon - .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon - - } - - private void showSetpView5() - { - List list5 = new ArrayList<>(); - list5.add("接单"); - list5.add("打包"); - list5.add("出发"); - list5.add("送单"); - list5.add("完成"); - StepView setpview5 = (StepView) findViewById(R.id.step_view5); - setpview5.setStepsViewIndicatorComplectingPosition(3)//设置完成的步数 - .setStepViewTexts(list5)//总步骤 - .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 - .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 - .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 - .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 - .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon - .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon - .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon - } - - private void showSetpView6() - { - StepView setpview6 = (StepView) findViewById(R.id.step_view6); - - List list6 = new ArrayList<>(); - list6.add("接单"); - list6.add("打包"); - list6.add("出发"); - list6.add("送单"); - list6.add("完成"); - list6.add("支付"); - setpview6.setStepsViewIndicatorComplectingPosition(4)//设置完成的步数 - .setStepViewTexts(list6)//总步骤 - .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 - .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 - .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 - .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 - .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon - .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon - .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + VerticalStepViewReverseFragment mVerticalStepViewFragment = new VerticalStepViewReverseFragment(); + getFragmentManager().beginTransaction().replace(R.id.container, mVerticalStepViewFragment).commit(); } @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_draw_canvas, menu); + getMenuInflater().inflate(R.menu.menu_main_activity, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - if(item.getItemId() == R.id.action_drawcanvas) + VerticalStepViewReverseFragment mVerticalStepViewFragment; + DrawCanvasFragment mDrawCanvasFragment; + HorizontalStepviewFragment mHorizontalStepviewFragment; + VerticalStepViewFrowardFragment mVerticalStepViewReverseFragment; + FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); + int itemId = item.getItemId(); + switch(itemId) { - Intent intent = new Intent(this,DrawCanvasActivity.class); - startActivity(intent); - return true; + case R.id.action_horizontal_stepview: + mHorizontalStepviewFragment = new HorizontalStepviewFragment(); + fragmentTransaction.replace(R.id.container, mHorizontalStepviewFragment).commit(); + break; + + case R.id.action_drawcanvas: + mDrawCanvasFragment = new DrawCanvasFragment(); + fragmentTransaction.replace(R.id.container, mDrawCanvasFragment).commit(); + break; + case R.id.action_vertical_reverse: + mVerticalStepViewFragment = new VerticalStepViewReverseFragment(); + fragmentTransaction.replace(R.id.container, mVerticalStepViewFragment).commit(); + break; + + case R.id.action_vertical_forward: + mVerticalStepViewReverseFragment = new VerticalStepViewFrowardFragment(); + fragmentTransaction.replace(R.id.container, mVerticalStepViewReverseFragment).commit(); + break; + + case R.id.action_test_horizontal_stepview: + startActivity(new Intent(this,TestHorizontalStepViewActivity.class)); + break; + + } return super.onOptionsItemSelected(item); } - - } \ No newline at end of file diff --git a/app/src/main/java/com/baoyachi/stepview/demo/TestHorizontalStepViewActivity.java b/app/src/main/java/com/baoyachi/stepview/demo/TestHorizontalStepViewActivity.java new file mode 100644 index 0000000..116f559 --- /dev/null +++ b/app/src/main/java/com/baoyachi/stepview/demo/TestHorizontalStepViewActivity.java @@ -0,0 +1,63 @@ +package com.baoyachi.stepview.demo; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.view.View; + +import com.baoyachi.stepview.HorizontalStepView; +import com.baoyachi.stepview.bean.StepBean; + +import java.util.ArrayList; +import java.util.List; + +/** + * 日期:16/7/26 15:06 + *

+ * 描述: + */ +public class TestHorizontalStepViewActivity extends AppCompatActivity +{ + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_test_horizontal); + findViewById(R.id.btn_status).setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + HorizontalStepView stepView = (HorizontalStepView) findViewById(R.id.stepview); + //-----------------------------this data is example and you can also get data from server----------------------------- + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",1); + StepBean stepBean2 = new StepBean("出发",0); + StepBean stepBean3 = new StepBean("送单",-1); + StepBean stepBean4 = new StepBean("完成",-1); + StepBean stepBean5 = new StepBean("支付",-1); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + stepsBeanList.add(stepBean2); + stepsBeanList.add(stepBean3); + stepsBeanList.add(stepBean4); + stepsBeanList.add(stepBean5); + //-----------------------------this data is example and you can also get data from server----------------------------- + + stepView.setStepViewTexts(stepsBeanList) + .setTextSize(16)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getBaseContext(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getBaseContext(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getBaseContext(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + } + }); + + + } +} diff --git a/app/src/main/java/com/baoyachi/stepview/demo/DrawCanvasActivity.java b/app/src/main/java/com/baoyachi/stepview/demo/fragment/DrawCanvasFragment.java similarity index 83% rename from app/src/main/java/com/baoyachi/stepview/demo/DrawCanvasActivity.java rename to app/src/main/java/com/baoyachi/stepview/demo/fragment/DrawCanvasFragment.java index 41c2910..f172467 100644 --- a/app/src/main/java/com/baoyachi/stepview/demo/DrawCanvasActivity.java +++ b/app/src/main/java/com/baoyachi/stepview/demo/fragment/DrawCanvasFragment.java @@ -1,5 +1,6 @@ -package com.baoyachi.stepview.demo; +package com.baoyachi.stepview.demo.fragment; +import android.app.Fragment; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; @@ -8,24 +9,26 @@ import android.graphics.Path; import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; + +import com.baoyachi.stepview.demo.R; /** - * 日期:16/6/22 20:45 + * 日期:16/6/24 20:00 *

* 描述: */ -public class DrawCanvasActivity extends AppCompatActivity +public class DrawCanvasFragment extends Fragment { + View mView; + @Nullable @Override - protected void onCreate(@Nullable Bundle savedInstanceState) + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - RectView myView = new RectView(this); - setContentView(myView); + return new RectView(container.getContext()); } - public class RectView extends View { diff --git a/app/src/main/java/com/baoyachi/stepview/demo/fragment/HorizontalStepviewFragment.java b/app/src/main/java/com/baoyachi/stepview/demo/fragment/HorizontalStepviewFragment.java new file mode 100644 index 0000000..6f36396 --- /dev/null +++ b/app/src/main/java/com/baoyachi/stepview/demo/fragment/HorizontalStepviewFragment.java @@ -0,0 +1,230 @@ +package com.baoyachi.stepview.demo.fragment; + +import android.app.Fragment; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.baoyachi.stepview.HorizontalStepView; +import com.baoyachi.stepview.bean.StepBean; +import com.baoyachi.stepview.demo.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * 日期:16/6/24 20:08 + *

+ * 描述: + */ +public class HorizontalStepviewFragment extends Fragment +{ + View mView; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) + { + mView = View.inflate(container.getContext(), R.layout.fragment_horizontal_stepview, null); + showSetpView0(); + showSetpView1(); + showSetpView2(); + showSetpView3(); + showSetpView4(); + showSetpView5(); + showSetpView6(); + return mView; + } + + /* + //-----------------------------this data is example and you can also get data from server----------------------------- + List stepsBeanList = new ArrayList(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",1); + StepBean stepBean2 = new StepBean("出发",0); + StepBean stepBean3 = new StepBean("送单",-1); + StepBean stepBean4 = new StepBean("完成",-1); + StepBean stepBean5 = new StepBean("支付",-1); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + stepsBeanList.add(stepBean2); + stepsBeanList.add(stepBean3); + stepsBeanList.add(stepBean4); + stepsBeanList.add(stepBean5); + //-----------------------------this data is example and you can also get data from server----------------------------- + + */ + + + private void showSetpView0() + { + HorizontalStepView setpview = (HorizontalStepView) mView.findViewById(R.id.step_view0); + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",1); + StepBean stepBean2 = new StepBean("出发",0); + StepBean stepBean3 = new StepBean("送单",-1); + StepBean stepBean4 = new StepBean("完成",-1); + StepBean stepBean5 = new StepBean("支付",-1); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + stepsBeanList.add(stepBean2); + stepsBeanList.add(stepBean3); + stepsBeanList.add(stepBean4); + stepsBeanList.add(stepBean5); + setpview.setStepViewTexts(stepsBeanList) + .setTextSize(16)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + } + + + private void showSetpView1() + { + HorizontalStepView setpview = (HorizontalStepView) mView.findViewById(R.id.step_view1); + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",-1); + stepsBeanList.add(stepBean0); + setpview.setStepViewTexts(stepsBeanList) + .setTextSize(8)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + } + + private void showSetpView2() + { + HorizontalStepView setpview2 = (HorizontalStepView) mView.findViewById(R.id.step_view2); + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",0); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + setpview2.setStepViewTexts(stepsBeanList) + .setTextSize(9)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + } + + private void showSetpView3() + { + HorizontalStepView setpview = (HorizontalStepView) mView.findViewById(R.id.step_view3); + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",0); + StepBean stepBean2 = new StepBean("出发",-1); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + stepsBeanList.add(stepBean2); + + setpview.setStepViewTexts(stepsBeanList) + .setTextSize(10)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + } + + private void showSetpView4() + { + HorizontalStepView setpview = (HorizontalStepView) mView.findViewById(R.id.step_view4); + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",1); + StepBean stepBean2 = new StepBean("出发",0); + StepBean stepBean3 = new StepBean("送单",-1); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + stepsBeanList.add(stepBean2); + stepsBeanList.add(stepBean3); + + setpview.setStepViewTexts(stepsBeanList) + .setTextSize(11)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + + + } + + private void showSetpView5() + { + HorizontalStepView setpview5 = (HorizontalStepView) mView.findViewById(R.id.step_view5); + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",1); + StepBean stepBean2 = new StepBean("出发",1); + StepBean stepBean3 = new StepBean("送单",0); + StepBean stepBean4 = new StepBean("完成",-1); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + stepsBeanList.add(stepBean2); + stepsBeanList.add(stepBean3); + stepsBeanList.add(stepBean4); + + + setpview5 + .setStepViewTexts(stepsBeanList)//总步骤 + .setTextSize(12)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + } + + private void showSetpView6() + { + HorizontalStepView setpview6 = (HorizontalStepView) mView.findViewById(R.id.step_view6); + + List stepsBeanList = new ArrayList<>(); + StepBean stepBean0 = new StepBean("接单",1); + StepBean stepBean1 = new StepBean("打包",1); + StepBean stepBean2 = new StepBean("出发",1); + StepBean stepBean3 = new StepBean("送单",1); + StepBean stepBean4 = new StepBean("完成",1); + StepBean stepBean5 = new StepBean("支付",1); + stepsBeanList.add(stepBean0); + stepsBeanList.add(stepBean1); + stepsBeanList.add(stepBean2); + stepsBeanList.add(stepBean3); + stepsBeanList.add(stepBean4); + stepsBeanList.add(stepBean5); + + setpview6.setStepViewTexts(stepsBeanList)//总步骤 + .setTextSize(13)//set textSize + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + } +} diff --git a/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewFrowardFragment.java b/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewFrowardFragment.java new file mode 100644 index 0000000..5e34b02 --- /dev/null +++ b/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewFrowardFragment.java @@ -0,0 +1,69 @@ +package com.baoyachi.stepview.demo.fragment; + +import android.app.Fragment; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.baoyachi.stepview.VerticalStepView; +import com.baoyachi.stepview.demo.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * 日期:16/6/24 19:39 + *

+ * 描述:正向画流程,默认是反向 you shoudle use this method VerticalStepView.reverseDraw(false); + */ +public class VerticalStepViewFrowardFragment extends Fragment +{ + View mView; + private VerticalStepView mSetpview0; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) + { + mView = mView.inflate(getActivity(), R.layout.fragment_vertical_stepview, null); + return mView; + } + + @Override + public void onStart() + { + super.onStart(); + mSetpview0 = (VerticalStepView) mView.findViewById(R.id.step_view0); + + List list0 = new ArrayList<>(); + list0.add("您已提交定单,等待系统确认"); + list0.add("您的商品需要从外地调拨,我们会尽快处理,请耐心等待"); + list0.add("您的订单已经进入亚洲第一仓储中心1号库准备出库"); + list0.add("您的订单预计6月23日送达您的手中,618期间促销火爆,可能影响送货时间,请您谅解,我们会第一时间送到您的手中"); + list0.add("您的订单已打印完毕"); + list0.add("您的订单已拣货完成"); + list0.add("扫描员已经扫描"); + list0.add("打包成功"); + list0.add("您的订单在京东【华东外单分拣中心】发货完成,准备送往京东【北京通州分拣中心】"); + list0.add("您的订单在京东【北京通州分拣中心】分拣完成"); + list0.add("您的订单在京东【北京通州分拣中心】发货完成,准备送往京东【北京中关村大厦站】"); + list0.add("您的订单在京东【北京中关村大厦站】验货完成,正在分配配送员"); + list0.add("配送员【包牙齿】已出发,联系电话【130-0000-0000】,感谢您的耐心等待,参加评价还能赢取好多礼物哦"); + list0.add("感谢你在京东购物,欢迎你下次光临!"); + mSetpview0.setStepsViewIndicatorComplectingPosition(list0.size() - 2)//设置完成的步数 + .reverseDraw(false)//default is true + .setTextSize(14) + .setStepViewTexts(list0)//总步骤 + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + + } +} diff --git a/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewReverseFragment.java b/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewReverseFragment.java new file mode 100644 index 0000000..62235d3 --- /dev/null +++ b/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewReverseFragment.java @@ -0,0 +1,69 @@ +package com.baoyachi.stepview.demo.fragment; + +import android.app.Fragment; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.baoyachi.stepview.VerticalStepView; +import com.baoyachi.stepview.demo.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * 日期:16/6/24 19:39 + *

+ * 描述:默认是反向画 default this VerticalStepViewIndicator draw is reverse + */ +public class VerticalStepViewReverseFragment extends Fragment +{ + View mView; + private VerticalStepView mSetpview0; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) + { + mView = mView.inflate(getActivity(), R.layout.fragment_vertical_stepview, null); + return mView; + } + + @Override + public void onStart() + { + super.onStart(); + mSetpview0 = (VerticalStepView) mView.findViewById(R.id.step_view0); + + List list0 = new ArrayList<>(); + list0.add("您已提交定单,等待系统确认"); + list0.add("您的商品需要从外地调拨,我们会尽快处理,请耐心等待"); + list0.add("您的订单已经进入亚洲第一仓储中心1号库准备出库"); + list0.add("您的订单预计6月23日送达您的手中,618期间促销火爆,可能影响送货时间,请您谅解,我们会第一时间送到您的手中"); + list0.add("您的订单已打印完毕"); + list0.add("您的订单已拣货完成"); + list0.add("扫描员已经扫描"); + list0.add("打包成功"); + list0.add("您的订单在京东【华东外单分拣中心】发货完成,准备送往京东【北京通州分拣中心】"); + list0.add("您的订单在京东【北京通州分拣中心】分拣完成"); + list0.add("您的订单在京东【北京通州分拣中心】发货完成,准备送往京东【北京中关村大厦站】"); + list0.add("您的订单在京东【北京中关村大厦站】验货完成,正在分配配送员"); + list0.add("配送员【包牙齿】已出发,联系电话【130-0000-0000】,感谢您的耐心等待,参加评价还能赢取好多礼物哦"); + list0.add("感谢你在京东购物,欢迎你下次光临!"); + mSetpview0.setStepsViewIndicatorComplectingPosition(list0.size() - 2)//设置完成的步数 + .setStepViewTexts(list0)//总步骤 + .setTextSize(12) + .setLinePaddingProportion(0.85f)//设置indicator线与线间距的比例系数 + .setStepsViewIndicatorCompletedLineColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsViewIndicator完成线的颜色 + .setStepsViewIndicatorUnCompletedLineColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsViewIndicator未完成线的颜色 + .setStepViewComplectedTextColor(ContextCompat.getColor(getActivity(), android.R.color.white))//设置StepsView text完成线的颜色 + .setStepViewUnComplectedTextColor(ContextCompat.getColor(getActivity(), R.color.uncompleted_text_color))//设置StepsView text未完成线的颜色 + .setStepsViewIndicatorCompleteIcon(ContextCompat.getDrawable(getActivity(), R.drawable.complted))//设置StepsViewIndicator CompleteIcon + .setStepsViewIndicatorDefaultIcon(ContextCompat.getDrawable(getActivity(), R.drawable.default_icon))//设置StepsViewIndicator DefaultIcon + .setStepsViewIndicatorAttentionIcon(ContextCompat.getDrawable(getActivity(), R.drawable.attention));//设置StepsViewIndicator AttentionIcon + + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 086f2d3..7834504 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,96 +1,13 @@ - - - - - - - - - - - - - - - - - - - - + android:layout_height="match_parent"/> - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_test_horizontal.xml b/app/src/main/res/layout/activity_test_horizontal.xml new file mode 100644 index 0000000..d036a60 --- /dev/null +++ b/app/src/main/res/layout/activity_test_horizontal.xml @@ -0,0 +1,30 @@ + + + + + +