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/README.md b/README.md index c6bb547..c572135 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,29 @@ -# 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 +####like this:HorizontalStepView +####like this + + +####also like this:VerticalStepView + + +Yeah,I am not working in JD,Just imitate.It's a joke .ha ha ha + +####Yeah,also like this + + +It is looks like so beautiful. + + + ##how to use Add it in your root build.gradle at the end of repositories: @@ -15,18 +33,19 @@ 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.5' } - - + +###use HorizontalStepView + in xml ```java - list0 = new ArrayList<>(); list0.add("接单"); + list0.add("打包"); 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 + .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 VerticalStepView reverseDraw(boolean isReverSe) + { + 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; + + +in xml + +```java + +``` +in code + +```java + +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("配送员【包牙齿】已出发,联系电话【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!!! +##See Detail +you can see there[Example](https://github.com/baoyachi/StepView/blob/master/app/src/main/java/com/baoyachi/stepview/demo/MainActivity.java) + ##Introduction @@ -208,27 +296,27 @@ DashPathEffect:DashPathEffect是PathEffect类的一个子类,可以使paint画 1.假设当前共有一步: 接单。 意味当前有一个圆,没有连线,得出paddingLeft - float paddingLeft= getWidth() - 1*(mCircleRadius*2)-0*mLinePadding; + float paddingLeft= (getWidth() - 1*(mCircleRadius*2)-0*mLinePadding)/2; 2.假设当前共有二步:接单->打包 意味当前有两个圆,之前有一条连线,得出paddingLeft - float paddingLeft= getWidth() - 2*(mCircleRadius*2)-1*mLinePadding; + float paddingLeft= (getWidth() - 2*(mCircleRadius*2)-1*mLinePadding)/2; 3.假设当前共有三步:接单->打包->出发 意味当前有三个圆,之前有二条连线,得出paddingLeft - float paddingLeft= getWidth() - 3*(mCircleRadius*2)-2*mLinePadding; + float paddingLeft= (getWidth() - 3*(mCircleRadius*2)-2*mLinePadding)/2; 4.假设当前共有四步:接单->打包->出发->送单 意味当前有四个圆,之前有三条连线,得出paddingLeft - float paddingLeft= getWidth() - 4*(mCircleRadius*2)-3*mLinePadding; + float paddingLeft= (getWidth() - 4*(mCircleRadius*2)-3*mLinePadding)/2; 5.假设当前共有五步:接单->打包->出发->送单->完成 意味着我当前有五个圆,五个圆中间有四条线相连接,这样我们可以得到五个圆的直径+四条线的长度,这样我们就可以得到最左边的paddingLeft的值: - float paddingLeft= getWidth() - 5*(mCircleRadius*2)-4*mLinePadding; + float paddingLeft= (getWidth() - 5*(mCircleRadius*2)-4*mLinePadding)/2; 综上所述: 得出一个计算公式:其中mStepNum:当前控件所展示的步数。 @@ -245,7 +333,8 @@ DashPathEffect:DashPathEffect是PathEffect类的一个子类,可以使paint画 ##Global graph 我们先来看下面这张动态全局预览图. 我们来看下全局预览图,当前StepView的展示是根据StepView的位置动态调整的。 - + + 是不是有了上面的小知识点的引导,这张图看起后,是不是思路就清晰许多了呢!是的,StepView本身就是有图片矩形和虚线绘制而成,下面我们进行拆分。 一步步解析。 @@ -433,10 +522,10 @@ DashPathEffect:DashPathEffect是PathEffect类的一个子类,可以使paint画 } ``` 这里细心的小伙伴可能有注意到,为什么在画线的的时候,为什么canvas.drawRect的时候,左右会分别-10,+10 - + canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); 那是因为当画矩形时,线和圆之间的连接像是有缝隙,于是我就让矩形在往左边多画了10单位,在右边多画了10单位,这样他们看起来像是无缝连接一样。哈哈,但是这间距不能太大。 - + * 画圆 这里判断小于正在进行中的为则表示已经完成。并且刚好等于正在进行中的且不等于一表示正在进行中,大于则表示该步骤为完成,分别绘制图标。 @@ -467,381 +556,6 @@ DashPathEffect:DashPathEffect是PathEffect类的一个子类,可以使paint画 //-----------------------画图标-------------------------------------------------------------- ``` - - - -###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小圆的半径 - * - * @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() - { - 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(); - } -} -``` - - ##StepView 好了StepsViewIndicator是不是已经完全熟悉了呢,下面我们看StepView.StepView其实组合控件,设置其子控件的属性,包括颜色,position的状态...其中有一个方法我们来看下,就是对于设置TextView的。 @@ -876,181 +590,13 @@ public class StepsViewIndicator extends View ``` 这里的ondrawIndicator()方法是在StepsViewIndicator的onSizeChanged()引发的回调,来设置TextView -##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);//定义默认完成文字的颜色; +好了,其实到了这里,基本上也要接近尾声了.有了前面知识的积累,写VerticalStepView是不是就思路更加明确了呢?其实这个控件看起来‘很复杂’,翻了翻代码,看了也没有多大难度,小伙伴们,只要静下心来,花点时间研究下,发现,也就是那么回事,只要努力,就会有收货。 - public StepView(Context context) - { - this(context, null); - } - - public StepView(Context context, AttributeSet attrs) - { - this(context, attrs, 0); - } +###VerticalStepView +这里就不在啰嗦的阐述VerticalStepView的原理啦,有了上面的HorizontalStepsViewIndicator的讲解,在来看看VerticalStepView应该是非常轻松的吧,好了,有想法的小伙伴何不尝试自己来写这个VerticalStepView,相信你可以的!!! - 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; - } - - /** - * 设置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; - } - - - @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); - } - } - } -} -``` -好了,其实到了这里,基本上也要接近尾声了,其实这个控件看起来‘很复杂’,翻了翻代码,看了也没有多大难度,小伙伴们,只要静下心来,花点时间研究下,发现,也就是那么回事,只要努力,就会有收货。 +* 【VerticalStepView参考地址】[VerticalStepView](https://github.com/baoyachi/StepView/blob/master/stepview/src/main/java/com/baoyachi/stepview/VerticalStepViewIndicator.java) ###参考链接 @@ -1069,4 +615,7 @@ public class StepView extends LinearLayout implements StepsViewIndicator.OnDrawI ##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..95b71d9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,6 @@ - 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..d87681e 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,82 @@ package com.baoyachi.stepview.demo; -import android.content.Intent; +import android.app.FragmentTransaction; 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; +import com.baoyachi.stepview.demo.fragment.VerticalStepViewSnapshotFragment; /** * 日期: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() + @Override + protected void onCreate(Bundle savedInstanceState) { - StepView setpview6 = (StepView) findViewById(R.id.step_view6); + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); - 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; + VerticalStepViewSnapshotFragment mVerticalStepViewSnapshotFragment; + 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_vertical_stepview_snapshot: + mVerticalStepViewSnapshotFragment = new VerticalStepViewSnapshotFragment(); + fragmentTransaction.replace(R.id.container, mVerticalStepViewSnapshotFragment).commit(); + break; + } return super.onOptionsItemSelected(item); } - - } \ No newline at end of file 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..c618600 --- /dev/null +++ b/app/src/main/java/com/baoyachi/stepview/demo/fragment/HorizontalStepviewFragment.java @@ -0,0 +1,177 @@ +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.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; + } + + + private void showSetpView0() + { + HorizontalStepView setpview0 = (HorizontalStepView) mView.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(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() + { + List list1 = new ArrayList<>(); + list1.add("接单"); + HorizontalStepView setpview1 = (HorizontalStepView) mView.findViewById(R.id.step_view1); + setpview1.setStepsViewIndicatorComplectingPosition(0)//设置完成的步数 + .setStepViewTexts(list1)//总步骤 + .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() + { + List list2 = new ArrayList<>(); + list2.add("接单"); + list2.add("打包"); + HorizontalStepView setpview2 = (HorizontalStepView) mView.findViewById(R.id.step_view2); + setpview2.setStepsViewIndicatorComplectingPosition(0)//设置完成的步数 + .setStepViewTexts(list2)//总步骤 + .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() + { + List list3 = new ArrayList<>(); + list3.add("接单"); + list3.add("打包"); + list3.add("出发"); + HorizontalStepView setpview3 = (HorizontalStepView) mView.findViewById(R.id.step_view3); + setpview3.setStepsViewIndicatorComplectingPosition(1)//设置完成的步数 + .setStepViewTexts(list3)//总步骤 + .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() + { + List list4 = new ArrayList<>(); + list4.add("接单"); + list4.add("打包"); + list4.add("出发"); + list4.add("送单"); + HorizontalStepView setpview4 = (HorizontalStepView) mView.findViewById(R.id.step_view4); + setpview4.setStepsViewIndicatorComplectingPosition(2)//设置完成的步数 + .setStepViewTexts(list4)//总步骤 + .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() + { + List list5 = new ArrayList<>(); + list5.add("接单"); + list5.add("打包"); + list5.add("出发"); + list5.add("送单"); + list5.add("完成"); + HorizontalStepView setpview5 = (HorizontalStepView) mView.findViewById(R.id.step_view5); + setpview5.setStepsViewIndicatorComplectingPosition(3)//设置完成的步数 + .setStepViewTexts(list5)//总步骤 + .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 list6 = new ArrayList<>(); + list6.add("接单"); + list6.add("打包"); + list6.add("出发"); + list6.add("送单"); + list6.add("完成"); + list6.add("支付"); + setpview6.setStepsViewIndicatorComplectingPosition(4)//设置完成的步数 + .setStepViewTexts(list6)//总步骤 + .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..29e6491 --- /dev/null +++ b/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewFrowardFragment.java @@ -0,0 +1,68 @@ +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 + .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..d3dc1a6 --- /dev/null +++ b/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewReverseFragment.java @@ -0,0 +1,68 @@ +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)//总步骤 + .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/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewSnapshotFragment.java b/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewSnapshotFragment.java new file mode 100644 index 0000000..b1beaec --- /dev/null +++ b/app/src/main/java/com/baoyachi/stepview/demo/fragment/VerticalStepViewSnapshotFragment.java @@ -0,0 +1,148 @@ +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 20:15 + *

+ * 描述: + */ +public class VerticalStepViewSnapshotFragment extends Fragment +{ + View mView; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) + { + mView = View.inflate(container.getContext(), R.layout.fragment_vertical_stepview_snapshot,null); + return mView; + } + + @Override + public void onStart() + { + super.onStart(); + + VerticalStepView setpview1 = (VerticalStepView) mView.findViewById(R.id.step_view1); + List list1 = new ArrayList<>(); + list1.add(""); + list1.add(""); + list1.add(""); + list1.add(""); + list1.add(""); + setpview1.setStepsViewIndicatorComplectingPosition(4)//设置完成的步数 + .setStepViewTexts(list1)//总步骤 + .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 + + VerticalStepView setpview2 = (VerticalStepView) mView.findViewById(R.id.step_view2); + List list2 = new ArrayList<>(); + list2.add(""); + list2.add(""); + list2.add(""); + list2.add(""); + setpview2.setStepsViewIndicatorComplectingPosition(3)//设置完成的步数 + .setStepViewTexts(list2)//总步骤 + .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 + + VerticalStepView setpview3 = (VerticalStepView) mView.findViewById(R.id.step_view3); + List list3 = new ArrayList<>(); + list3.add(""); + list3.add(""); + list3.add(""); + setpview3.setStepsViewIndicatorComplectingPosition(2)//设置完成的步数 + .setStepViewTexts(list3)//总步骤 + .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 + + VerticalStepView setpview4 = (VerticalStepView) mView.findViewById(R.id.step_view4); + List list4 = new ArrayList<>(); + list4.add(""); + list4.add(""); + setpview4.setStepsViewIndicatorComplectingPosition(1)//设置完成的步数 + .setStepViewTexts(list4)//总步骤 + .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 + + VerticalStepView setpview5 = (VerticalStepView) mView.findViewById(R.id.step_view5); + List list5 = new ArrayList<>(); + list5.add(""); + list5.add(""); + setpview5.setStepsViewIndicatorComplectingPosition(0)//设置完成的步数 + .setStepViewTexts(list5)//总步骤 + .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 + + VerticalStepView setpview6 = (VerticalStepView) mView.findViewById(R.id.step_view6); + List list6 = new ArrayList<>(); + list6.add(""); + setpview6.setStepsViewIndicatorComplectingPosition(0)//设置完成的步数 + .setStepViewTexts(list6)//总步骤 + .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 + + + VerticalStepView setpview7 = (VerticalStepView) mView.findViewById(R.id.step_view7); + List list7 = new ArrayList<>(); + list7.add(""); + list7.add(""); + list7.add(""); + list7.add(""); + list7.add(""); + list7.add(""); + list7.add(""); + setpview7.setStepsViewIndicatorComplectingPosition(3)//设置完成的步数 + .setStepViewTexts(list7)//总步骤 + .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/fragment_horizontal_stepview.xml b/app/src/main/res/layout/fragment_horizontal_stepview.xml new file mode 100644 index 0000000..7b1fdf5 --- /dev/null +++ b/app/src/main/res/layout/fragment_horizontal_stepview.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_vertical_stepview.xml b/app/src/main/res/layout/fragment_vertical_stepview.xml new file mode 100644 index 0000000..fb3f545 --- /dev/null +++ b/app/src/main/res/layout/fragment_vertical_stepview.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_vertical_stepview_snapshot.xml b/app/src/main/res/layout/fragment_vertical_stepview_snapshot.xml new file mode 100644 index 0000000..da84176 --- /dev/null +++ b/app/src/main/res/layout/fragment_vertical_stepview_snapshot.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_draw_canvas.xml b/app/src/main/res/menu/menu_draw_canvas.xml deleted file mode 100644 index ac0d352..0000000 --- a/app/src/main/res/menu/menu_draw_canvas.xml +++ /dev/null @@ -1,10 +0,0 @@ -

- - diff --git a/app/src/main/res/menu/menu_main_activity.xml b/app/src/main/res/menu/menu_main_activity.xml new file mode 100644 index 0000000..3ed1281 --- /dev/null +++ b/app/src/main/res/menu/menu_main_activity.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + diff --git a/art/forward_indicator.png b/art/forward_indicator.png new file mode 100644 index 0000000..fb6de3f Binary files /dev/null and b/art/forward_indicator.png differ diff --git a/art/jd_reverse_express.png b/art/jd_reverse_express.png new file mode 100644 index 0000000..2bb760c Binary files /dev/null and b/art/jd_reverse_express.png differ diff --git a/art/reverse_indicator.png b/art/reverse_indicator.png new file mode 100644 index 0000000..8010a48 Binary files /dev/null and b/art/reverse_indicator.png differ diff --git a/art/vertical_snapshot.png b/art/vertical_snapshot.png new file mode 100644 index 0000000..12eab96 Binary files /dev/null and b/art/vertical_snapshot.png differ diff --git a/art/vertical_snapshot_reverse.png b/art/vertical_snapshot_reverse.png new file mode 100644 index 0000000..6c4ba6d Binary files /dev/null and b/art/vertical_snapshot_reverse.png differ diff --git a/art/vertical_stepview.gif b/art/vertical_stepview.gif new file mode 100644 index 0000000..98b1f19 Binary files /dev/null and b/art/vertical_stepview.gif differ diff --git a/stepview/src/main/java/com/baoyachi/stepview/StepView.java b/stepview/src/main/java/com/baoyachi/stepview/HorizontalStepView.java similarity index 76% rename from stepview/src/main/java/com/baoyachi/stepview/StepView.java rename to stepview/src/main/java/com/baoyachi/stepview/HorizontalStepView.java index caa5d9e..cc6f141 100644 --- a/stepview/src/main/java/com/baoyachi/stepview/StepView.java +++ b/stepview/src/main/java/com/baoyachi/stepview/HorizontalStepView.java @@ -19,28 +19,27 @@ *

* 描述:StepView */ -public class StepView extends LinearLayout implements StepsViewIndicator.OnDrawIndicatorListener +public class HorizontalStepView extends LinearLayout implements HorizontalStepsViewIndicator.OnDrawIndicatorListener { private RelativeLayout mTextContainer; - private StepsViewIndicator mStepsViewIndicator; + private HorizontalStepsViewIndicator 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) + public HorizontalStepView(Context context) { this(context, null); } - public StepView(Context context, AttributeSet attrs) + public HorizontalStepView(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public StepView(Context context, AttributeSet attrs, int defStyleAttr) + public HorizontalStepView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); @@ -48,8 +47,8 @@ public StepView(Context context, AttributeSet attrs, int defStyleAttr) private void init() { - View rootView = LayoutInflater.from(getContext()).inflate(R.layout.widget_stepsview, this); - mStepsViewIndicator = (StepsViewIndicator) rootView.findViewById(R.id.steps_indicator); + View rootView = LayoutInflater.from(getContext()).inflate(R.layout.widget_horizontal_stepsview, this); + mStepsViewIndicator = (HorizontalStepsViewIndicator) rootView.findViewById(R.id.steps_indicator); mStepsViewIndicator.setOnDrawListener(this); mTextContainer = (RelativeLayout) rootView.findViewById(R.id.rl_text_container); mTextContainer.removeAllViews(); @@ -61,7 +60,7 @@ private void init() * @param texts * @return */ - public StepView setStepViewTexts(List texts) + public HorizontalStepView setStepViewTexts(List texts) { mTexts = texts; mStepsViewIndicator.setStepNum(mTexts.size()); @@ -74,7 +73,7 @@ public StepView setStepViewTexts(List texts) * @param complectingPosition * @return */ - public StepView setStepsViewIndicatorComplectingPosition(int complectingPosition) + public HorizontalStepView setStepsViewIndicatorComplectingPosition(int complectingPosition) { mComplectingPosition = complectingPosition; mStepsViewIndicator.setComplectingPosition(complectingPosition); @@ -87,7 +86,7 @@ public StepView setStepsViewIndicatorComplectingPosition(int complectingPosition * @param unComplectedTextColor * @return */ - public StepView setStepViewUnComplectedTextColor(int unComplectedTextColor) + public HorizontalStepView setStepViewUnComplectedTextColor(int unComplectedTextColor) { mUnComplectedTextColor = unComplectedTextColor; return this; @@ -99,7 +98,7 @@ public StepView setStepViewUnComplectedTextColor(int unComplectedTextColor) * @param complectedTextColor * @return */ - public StepView setStepViewComplectedTextColor(int complectedTextColor) + public HorizontalStepView setStepViewComplectedTextColor(int complectedTextColor) { this.mComplectedTextColor = complectedTextColor; return this; @@ -111,7 +110,7 @@ public StepView setStepViewComplectedTextColor(int complectedTextColor) * @param unCompletedLineColor * @return */ - public StepView setStepsViewIndicatorUnCompletedLineColor(int unCompletedLineColor) + public HorizontalStepView setStepsViewIndicatorUnCompletedLineColor(int unCompletedLineColor) { mStepsViewIndicator.setUnCompletedLineColor(unCompletedLineColor); return this; @@ -123,7 +122,7 @@ public StepView setStepsViewIndicatorUnCompletedLineColor(int unCompletedLineCol * @param completedLineColor * @return */ - public StepView setStepsViewIndicatorCompletedLineColor(int completedLineColor) + public HorizontalStepView setStepsViewIndicatorCompletedLineColor(int completedLineColor) { mStepsViewIndicator.setCompletedLineColor(completedLineColor); return this; @@ -134,7 +133,7 @@ public StepView setStepsViewIndicatorCompletedLineColor(int completedLineColor) * * @param defaultIcon */ - public StepView setStepsViewIndicatorDefaultIcon(Drawable defaultIcon) + public HorizontalStepView setStepsViewIndicatorDefaultIcon(Drawable defaultIcon) { mStepsViewIndicator.setDefaultIcon(defaultIcon); return this; @@ -145,7 +144,7 @@ public StepView setStepsViewIndicatorDefaultIcon(Drawable defaultIcon) * * @param completeIcon */ - public StepView setStepsViewIndicatorCompleteIcon(Drawable completeIcon) + public HorizontalStepView setStepsViewIndicatorCompleteIcon(Drawable completeIcon) { mStepsViewIndicator.setCompleteIcon(completeIcon); return this; @@ -156,17 +155,16 @@ public StepView setStepsViewIndicatorCompleteIcon(Drawable completeIcon) * * @param attentionIcon */ - public StepView setStepsViewIndicatorAttentionIcon(Drawable attentionIcon) + public HorizontalStepView setStepsViewIndicatorAttentionIcon(Drawable attentionIcon) { mStepsViewIndicator.setAttentionIcon(attentionIcon); return this; } - @Override public void ondrawIndicator() { - List complectedXPosition = mStepsViewIndicator.getComplectedXPosition(); + List complectedXPosition = mStepsViewIndicator.getCircleCenterPointPositionList(); if(mTexts != null) { for(int i = 0; i < mTexts.size(); i++) diff --git a/stepview/src/main/java/com/baoyachi/stepview/StepsViewIndicator.java b/stepview/src/main/java/com/baoyachi/stepview/HorizontalStepsViewIndicator.java similarity index 67% rename from stepview/src/main/java/com/baoyachi/stepview/StepsViewIndicator.java rename to stepview/src/main/java/com/baoyachi/stepview/HorizontalStepsViewIndicator.java index 93df248..6edda06 100644 --- a/stepview/src/main/java/com/baoyachi/stepview/StepsViewIndicator.java +++ b/stepview/src/main/java/com/baoyachi/stepview/HorizontalStepsViewIndicator.java @@ -19,36 +19,36 @@ /** * 日期:16/6/22 14:15 - *

- * 描述:StepsViewIndicator指示器 + *

+ * 描述:StepsViewIndicator 指示器 */ -public class StepsViewIndicator extends View +public class HorizontalStepsViewIndicator extends View { - //定义默认的高度 + //定义默认的高度 definition default height private int defaultStepIndicatorNum = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()); - private float mCompletedLineHeight;//完成线的高度 - private float mCircleRadius;//圆的半径 + private float mCompletedLineHeight;//完成线的高度 definition completed line height + private float mCircleRadius;//圆的半径 definition circle radius - private Drawable mCompleteIcon;//完成的默认图片 - private Drawable mAttentionIcon;//正在进行的默认图片 - private Drawable mDefaultIcon;//默认的背景图 - private float mCenterY;//该view的中间位置 - private float mLeftY;//左上方的Y位置 - private float mRightY;//右下方的位置 + private Drawable mCompleteIcon;//完成的默认图片 definition default completed icon + private Drawable mAttentionIcon;//正在进行的默认图片 definition default underway icon + private Drawable mDefaultIcon;//默认的背景图 definition default unCompleted icon + private float mCenterY;//该view的Y轴中间位置 definition view centerY position + private float mLeftY;//左上方的Y位置 definition rectangle LeftY position + private float mRightY;//右下方的位置 definition rectangle RightY position - private int mStepNum = 0;//当前有几部流程 - private float mLinePadding; + private int mStepNum = 0;//当前有几部流程 there are currently few step + private float mLinePadding;//两条连线之间的间距 definition the spacing between the two circles - 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 List mCircleCenterPointPositionList;//定义所有圆的圆心点位置的集合 definition all of circles center point list + private Paint mUnCompletedPaint;//未完成Paint definition mUnCompletedPaint + private Paint mCompletedPaint;//完成paint definition mCompletedPaint + private int mUnCompletedLineColor = ContextCompat.getColor(getContext(), R.color.uncompleted_color);//定义默认未完成线的颜色 definition mUnCompletedLineColor + private int mCompletedLineColor = Color.WHITE;//定义默认完成线的颜色 definition mCompletedLineColor private PathEffect mEffects; - private int mComplectingPosition;//正在进行position + private int mComplectingPosition;//正在进行position underway position private Path mPath; private OnDrawIndicatorListener mOnDrawListener; @@ -64,7 +64,7 @@ public void setOnDrawListener(OnDrawIndicatorListener onDrawListener) } /** - * get小圆的半径 + * get圆的半径 get circle radius * * @return */ @@ -73,17 +73,18 @@ public float getCircleRadius() return mCircleRadius; } - public StepsViewIndicator(Context context) + + public HorizontalStepsViewIndicator(Context context) { this(context, null); } - public StepsViewIndicator(Context context, AttributeSet attrs) + public HorizontalStepsViewIndicator(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public StepsViewIndicator(Context context, AttributeSet attrs, int defStyle) + public HorizontalStepsViewIndicator(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); @@ -97,7 +98,7 @@ private void init() mPath = new Path(); mEffects = new DashPathEffect(new float[]{8, 8, 8, 8}, 1); - mComplectedXPosition = new ArrayList<>();//初始化 + mCircleCenterPointPositionList = new ArrayList<>();//初始化 mUnCompletedPaint = new Paint(); mCompletedPaint = new Paint(); @@ -114,11 +115,11 @@ private void init() mUnCompletedPaint.setPathEffect(mEffects); mCompletedPaint.setStyle(Paint.Style.FILL); - //已经完成线的宽高 + //已经完成线的宽高 set mCompletedLineHeight mCompletedLineHeight = 0.05f * defaultStepIndicatorNum; - //圆的半径 + //圆的半径 set mCircleRadius mCircleRadius = 0.28f * defaultStepIndicatorNum; - //线与线之间的间距 + //线与线之间的间距 set mLinePadding mLinePadding = 0.85f * defaultStepIndicatorNum; mCompleteIcon = ContextCompat.getDrawable(getContext(), R.drawable.complted);//已经完成的icon @@ -146,7 +147,7 @@ protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpe protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); - //获取中间的高度 + //获取中间的高度,目的是为了让该view绘制的线和圆在该view垂直居中 get view centerY,keep current stepview center vertical mCenterY = 0.5f * getHeight(); //获取左上方Y的位置,获取该点的意义是为了方便画矩形左上的Y位置 mLeftY = mCenterY - (mCompletedLineHeight / 2); @@ -157,30 +158,41 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { //先计算全部最左边的padding值(getWidth()-(圆形直径+两圆之间距离)*2) float paddingLeft = (getWidth() - mStepNum * mCircleRadius * 2 - (mStepNum - 1) * mLinePadding) / 2; - mComplectedXPosition.add(paddingLeft + mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding); + //add to list + mCircleCenterPointPositionList.add(paddingLeft + mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding); } - mOnDrawListener.ondrawIndicator(); + /** + * set listener + */ + if(mOnDrawListener!=null) + { + mOnDrawListener.ondrawIndicator(); + } } @Override protected synchronized void onDraw(Canvas canvas) { super.onDraw(canvas); + if(mOnDrawListener!=null) + { + mOnDrawListener.ondrawIndicator(); + } mUnCompletedPaint.setColor(mUnCompletedLineColor); mCompletedPaint.setColor(mCompletedLineColor); - //-----------------------画线--------------------------------------------------------------- - for(int i = 0; i < mComplectedXPosition.size() - 1; i++) + //-----------------------画线-------draw line----------------------------------------------- + for(int i = 0; i < mCircleCenterPointPositionList.size() - 1; i++) { //前一个ComplectedXPosition - final float preComplectedXPosition = mComplectedXPosition.get(i); + final float preComplectedXPosition = mCircleCenterPointPositionList.get(i); //后一个ComplectedXPosition - final float afterComplectedXPosition = mComplectedXPosition.get(i + 1); + final float afterComplectedXPosition = mCircleCenterPointPositionList.get(i + 1); if(i < mComplectingPosition)//判断在完成之前的所有点 { - //判断在完成之前的所有点,画完成的线,这里是矩形 + //判断在完成之前的所有点,画完成的线,这里是矩形,很细的矩形,类似线,为了做区分,好看些 canvas.drawRect(preComplectedXPosition + mCircleRadius - 10, mLeftY, afterComplectedXPosition - mCircleRadius + 10, mRightY, mCompletedPaint); } else { @@ -189,19 +201,19 @@ protected synchronized void onDraw(Canvas canvas) canvas.drawPath(mPath, mUnCompletedPaint); } } - //-----------------------画线--------------------------------------------------------------- + //-----------------------画线-------draw line----------------------------------------------- - //-----------------------画图标-------------------------------------------------------------- - for(int i = 0; i < mComplectedXPosition.size(); i++) + //-----------------------画图标-----draw icon----------------------------------------------- + for(int i = 0; i < mCircleCenterPointPositionList.size(); i++) { - final float currentComplectedXPosition = mComplectedXPosition.get(i); + final float currentComplectedXPosition = mCircleCenterPointPositionList.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) + } else if(i == mComplectingPosition && mCircleCenterPointPositionList.size() != 1) { mCompletedPaint.setColor(Color.WHITE); canvas.drawCircle(currentComplectedXPosition, mCenterY, mCircleRadius * 1.1f, mCompletedPaint); @@ -213,7 +225,7 @@ protected synchronized void onDraw(Canvas canvas) mDefaultIcon.draw(canvas); } } - //-----------------------画图标-------------------------------------------------------------- + //-----------------------画图标-----draw icon----------------------------------------------- } /** @@ -221,9 +233,9 @@ protected synchronized void onDraw(Canvas canvas) * * @return */ - public List getComplectedXPosition() + public List getCircleCenterPointPositionList() { - return mComplectedXPosition; + return mCircleCenterPointPositionList; } /** @@ -280,6 +292,7 @@ public void setDefaultIcon(Drawable defaultIcon) /** * 设置已完成图片 + * * @param completeIcon */ public void setCompleteIcon(Drawable completeIcon) @@ -289,6 +302,7 @@ public void setCompleteIcon(Drawable completeIcon) /** * 设置正在进行中的图片 + * * @param attentionIcon */ public void setAttentionIcon(Drawable attentionIcon) diff --git a/stepview/src/main/java/com/baoyachi/stepview/VerticalStepView.java b/stepview/src/main/java/com/baoyachi/stepview/VerticalStepView.java new file mode 100644 index 0000000..6aa213b --- /dev/null +++ b/stepview/src/main/java/com/baoyachi/stepview/VerticalStepView.java @@ -0,0 +1,219 @@ +package com.baoyachi.stepview; + +import android.content.Context; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.List; + +/** + * 日期:16/6/24 11:48 + *

+ * 描述: + */ +public class VerticalStepView extends LinearLayout implements VerticalStepViewIndicator.OnDrawIndicatorListener +{ + private RelativeLayout mTextContainer; + private VerticalStepViewIndicator 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 VerticalStepView(Context context) + { + this(context, null); + } + + public VerticalStepView(Context context, AttributeSet attrs) + { + this(context, attrs, 0); + } + + public VerticalStepView(Context context, AttributeSet attrs, int defStyleAttr) + { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() + { + View rootView = LayoutInflater.from(getContext()).inflate(R.layout.widget_vertical_stepsview, this); + mStepsViewIndicator = (VerticalStepViewIndicator) rootView.findViewById(R.id.steps_indicator); + mStepsViewIndicator.setOnDrawListener(this); + mTextContainer = (RelativeLayout) rootView.findViewById(R.id.rl_text_container); + mTextContainer.removeAllViews(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + /** + * 设置显示的文字 + * + * @param texts + * @return + */ + public VerticalStepView setStepViewTexts(List texts) + { + mTexts = texts; + mStepsViewIndicator.setStepNum(mTexts.size()); + return this; + } + + /** + * 设置正在进行的position + * + * @param complectingPosition + * @return + */ + public VerticalStepView setStepsViewIndicatorComplectingPosition(int complectingPosition) + { + mComplectingPosition = complectingPosition; + mStepsViewIndicator.setComplectingPosition(complectingPosition); + return this; + } + + /** + * 设置未完成文字的颜色 + * + * @param unComplectedTextColor + * @return + */ + public VerticalStepView setStepViewUnComplectedTextColor(int unComplectedTextColor) + { + mUnComplectedTextColor = unComplectedTextColor; + return this; + } + + /** + * 设置完成文字的颜色 + * + * @param complectedTextColor + * @return + */ + public VerticalStepView setStepViewComplectedTextColor(int complectedTextColor) + { + this.mComplectedTextColor = complectedTextColor; + return this; + } + + /** + * 设置StepsViewIndicator未完成线的颜色 + * + * @param unCompletedLineColor + * @return + */ + public VerticalStepView setStepsViewIndicatorUnCompletedLineColor(int unCompletedLineColor) + { + mStepsViewIndicator.setUnCompletedLineColor(unCompletedLineColor); + return this; + } + + /** + * 设置StepsViewIndicator完成线的颜色 + * + * @param completedLineColor + * @return + */ + public VerticalStepView setStepsViewIndicatorCompletedLineColor(int completedLineColor) + { + mStepsViewIndicator.setCompletedLineColor(completedLineColor); + return this; + } + + /** + * 设置StepsViewIndicator默认图片 + * + * @param defaultIcon + */ + public VerticalStepView setStepsViewIndicatorDefaultIcon(Drawable defaultIcon) + { + mStepsViewIndicator.setDefaultIcon(defaultIcon); + return this; + } + + /** + * 设置StepsViewIndicator已完成图片 + * + * @param completeIcon + */ + public VerticalStepView setStepsViewIndicatorCompleteIcon(Drawable completeIcon) + { + mStepsViewIndicator.setCompleteIcon(completeIcon); + return this; + } + + /** + * 设置StepsViewIndicator正在进行中的图片 + * + * @param attentionIcon + */ + public VerticalStepView setStepsViewIndicatorAttentionIcon(Drawable attentionIcon) + { + mStepsViewIndicator.setAttentionIcon(attentionIcon); + return this; + } + + /** + * is reverse draw 是否倒序画 + * + * @param isReverSe default is true + * @return + */ + public VerticalStepView reverseDraw(boolean isReverSe) + { + this.mStepsViewIndicator.reverseDraw(isReverSe); + return this; + } + + /** + * set linePadding proportion 设置线间距的比例系数 + * @param linePaddingProportion + * @return + */ + public VerticalStepView setLinePaddingProportion(float linePaddingProportion) + { + this.mStepsViewIndicator.setIndicatorLinePaddingProportion(linePaddingProportion); + return this; + } + + @Override + public void ondrawIndicator() + { + List complectedXPosition = mStepsViewIndicator.getCircleCenterPointPositionList(); + if(mTexts != null) + { + for(int i = 0; i < mTexts.size(); i++) + { + TextView textView = new TextView(getContext()); + textView.setText(mTexts.get(i)); + textView.setY(complectedXPosition.get(i) - mStepsViewIndicator.getCircleRadius() / 2); + 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); + } + } + } +} diff --git a/stepview/src/main/java/com/baoyachi/stepview/VerticalStepViewIndicator.java b/stepview/src/main/java/com/baoyachi/stepview/VerticalStepViewIndicator.java new file mode 100644 index 0000000..bb82fb5 --- /dev/null +++ b/stepview/src/main/java/com/baoyachi/stepview/VerticalStepViewIndicator.java @@ -0,0 +1,367 @@ +package com.baoyachi.stepview; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.DashPathEffect; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PathEffect; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.View; + +import java.util.ArrayList; +import java.util.List; + +/** + * 日期:16/6/24 11:48 + *

+ * 描述: + */ +public class VerticalStepViewIndicator extends View +{ + //定义默认的高度 definition default height + private int defaultStepIndicatorNum = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()); + + private float mCompletedLineHeight;//完成线的高度 definition completed line height + private float mCircleRadius;//圆的半径 definition circle radius + + private Drawable mCompleteIcon;//完成的默认图片 definition default completed icon + private Drawable mAttentionIcon;//正在进行的默认图片 definition default underway icon + private Drawable mDefaultIcon;//默认的背景图 definition default unCompleted icon + private float mCenterX;//该View的X轴的中间位置 + private float mLeftY; + private float mRightY; + + private int mStepNum = 0;//当前有几部流程 there are currently few step + private float mLinePadding;//两条连线之间的间距 definition the spacing between the two circles + + private List mCircleCenterPointPositionList;//定义所有圆的圆心点位置的集合 definition all of circles center point list + private Paint mUnCompletedPaint;//未完成Paint definition mUnCompletedPaint + private Paint mCompletedPaint;//完成paint definition mCompletedPaint + private int mUnCompletedLineColor = ContextCompat.getColor(getContext(), R.color.uncompleted_color);//定义默认未完成线的颜色 definition mUnCompletedLineColor + private int mCompletedLineColor = Color.WHITE;//定义默认完成线的颜色 definition mCompletedLineColor + private PathEffect mEffects; + + private int mComplectingPosition;//正在进行position underway position + private Path mPath; + + private OnDrawIndicatorListener mOnDrawListener; + private Rect mRect; + private int mHeight;//这个控件的动态高度 this view dynamic height + private boolean mIsReverseDraw;//is reverse draw this view; + + + /** + * 设置监听 + * + * @param onDrawListener + */ + public void setOnDrawListener(OnDrawIndicatorListener onDrawListener) + { + mOnDrawListener = onDrawListener; + } + + /** + * get圆的半径 get circle radius + * + * @return + */ + public float getCircleRadius() + { + return mCircleRadius; + } + + + public VerticalStepViewIndicator(Context context) + { + this(context, null); + } + + public VerticalStepViewIndicator(Context context, AttributeSet attrs) + { + this(context, attrs, 0); + } + + public VerticalStepViewIndicator(Context context, AttributeSet attrs, int defStyle) + { + super(context, attrs, defStyle); + init(); + } + + /** + * init + */ + private void init() + { + mPath = new Path(); + mEffects = new DashPathEffect(new float[]{8, 8, 8, 8}, 1); + + mCircleCenterPointPositionList = 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); + + //已经完成线的宽高 set mCompletedLineHeight + mCompletedLineHeight = 0.05f * defaultStepIndicatorNum; + //圆的半径 set mCircleRadius + mCircleRadius = 0.28f * defaultStepIndicatorNum; + //线与线之间的间距 set mLinePadding + 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 + + mIsReverseDraw = true;//default draw + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = defaultStepIndicatorNum; + mHeight = 0; + if(mStepNum > 0) + { + //dynamic measure VerticalStepViewIndicator height + mHeight = (int) (getPaddingTop() + getPaddingBottom() + mCircleRadius * 2 * mStepNum + (mStepNum - 1) * mLinePadding); + } + if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(widthMeasureSpec)) + { + width = Math.min(width, MeasureSpec.getSize(widthMeasureSpec)); + } + if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(heightMeasureSpec)) + { + mHeight = MeasureSpec.getSize(heightMeasureSpec); + } + setMeasuredDimension(width, mHeight); + + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) + { + super.onSizeChanged(w, h, oldw, oldh); + mCenterX = getWidth() / 2; + mLeftY = mCenterX - (mCompletedLineHeight / 2); + mRightY = mCenterX + (mCompletedLineHeight / 2); + + for(int i = 0; i < mStepNum; i++) + { + //reverse draw VerticalStepViewIndicator + if(mIsReverseDraw) + { + mCircleCenterPointPositionList.add(mHeight - (mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding)); + } else + { + mCircleCenterPointPositionList.add(mCircleRadius + i * mCircleRadius * 2 + i * mLinePadding); + } + } + /** + * set listener + */ + if(mOnDrawListener != null) + { + mOnDrawListener.ondrawIndicator(); + } + } + + @Override + protected void onDraw(Canvas canvas) + { + super.onDraw(canvas); + if(mOnDrawListener != null) + { + mOnDrawListener.ondrawIndicator(); + } + mUnCompletedPaint.setColor(mUnCompletedLineColor); + mCompletedPaint.setColor(mCompletedLineColor); + + //-----------------------画线-------draw line----------------------------------------------- + for(int i = 0; i < mCircleCenterPointPositionList.size() - 1; i++) + { + //前一个ComplectedXPosition + final float preComplectedXPosition = mCircleCenterPointPositionList.get(i); + //后一个ComplectedXPosition + final float afterComplectedXPosition = mCircleCenterPointPositionList.get(i + 1); + + if(i < mComplectingPosition)//判断在完成之前的所有点 + { + //判断在完成之前的所有点,画完成的线,这里是矩形,很细的矩形,类似线,为了做区分,好看些 + if(mIsReverseDraw) + { + canvas.drawRect(mLeftY, afterComplectedXPosition + mCircleRadius - 10, mRightY, preComplectedXPosition - mCircleRadius + 10, mCompletedPaint); + } else + { + canvas.drawRect(mLeftY, preComplectedXPosition + mCircleRadius - 10, mRightY, afterComplectedXPosition - mCircleRadius + 10, mCompletedPaint); + } + } else + { + if(mIsReverseDraw) + { + mPath.moveTo(mCenterX, afterComplectedXPosition + mCircleRadius); + mPath.lineTo(mCenterX, preComplectedXPosition - mCircleRadius); + canvas.drawPath(mPath, mUnCompletedPaint); + } else + { + mPath.moveTo(mCenterX, preComplectedXPosition + mCircleRadius); + mPath.lineTo(mCenterX, afterComplectedXPosition - mCircleRadius); + canvas.drawPath(mPath, mUnCompletedPaint); + } + + } + } + //-----------------------画线-------draw line----------------------------------------------- + + //-----------------------画图标-----draw icon----------------------------------------------- + for(int i = 0; i < mCircleCenterPointPositionList.size(); i++) + { + final float currentComplectedXPosition = mCircleCenterPointPositionList.get(i); + mRect = new Rect((int) (mCenterX - mCircleRadius), (int) (currentComplectedXPosition - mCircleRadius), (int) (mCenterX + mCircleRadius), (int) (currentComplectedXPosition + mCircleRadius)); + if(i < mComplectingPosition) + { + mCompleteIcon.setBounds(mRect); + mCompleteIcon.draw(canvas); + } else if(i == mComplectingPosition && mCircleCenterPointPositionList.size() != 1) + { + mCompletedPaint.setColor(Color.WHITE); + canvas.drawCircle(mCenterX, currentComplectedXPosition, mCircleRadius * 1.1f, mCompletedPaint); + mAttentionIcon.setBounds(mRect); + mAttentionIcon.draw(canvas); + } else + { + mDefaultIcon.setBounds(mRect); + mDefaultIcon.draw(canvas); + } + } + //-----------------------画图标-----draw icon----------------------------------------------- + } + + + /** + * 得到所有圆点所在的位置 + * + * @return + */ + public List getCircleCenterPointPositionList() + { + return mCircleCenterPointPositionList; + } + + /** + * 设置流程步数 + * + * @param stepNum 流程步数 + */ + public void setStepNum(int stepNum) + { + this.mStepNum = stepNum; + invalidate(); + } + + /** + * + * 设置线间距的比例系数 set linePadding proportion + * @param linePaddingProportion + */ + public void setIndicatorLinePaddingProportion(float linePaddingProportion) + { + this.mLinePadding = linePaddingProportion * defaultStepIndicatorNum; + } + + /** + * 设置正在进行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; + } + + /** + * is reverse draw 是否倒序画 + */ + public void reverseDraw(boolean isReverseDraw) + { + this.mIsReverseDraw = isReverseDraw; + invalidate(); + } + + /** + * 设置默认图片 + * + * @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(); + } +} diff --git a/stepview/src/main/res/layout/widget_stepsview.xml b/stepview/src/main/res/layout/widget_horizontal_stepsview.xml similarity index 91% rename from stepview/src/main/res/layout/widget_stepsview.xml rename to stepview/src/main/res/layout/widget_horizontal_stepsview.xml index a3b8d5e..8f7a3a3 100755 --- a/stepview/src/main/res/layout/widget_stepsview.xml +++ b/stepview/src/main/res/layout/widget_horizontal_stepsview.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - + + + + + + \ No newline at end of file