Android实现简洁的应用更新对话框数字进度条

  

前言:现在一般的Android软件都是需要不断更新的,当你打开某个应用的时候,如果有新的版本,它会提示你有新版本需要更新。当有更新时,会弹出一个提示框,点击下载,则在通知来创建一个数字进度条进行下载,下载成功后才到安装界面。

  

<>强效果:,

  

,  Android实现简洁的应用更新对话框数字进度条

  

<强>开发环境: AndroidStudio2.2.1 + gradle-2.14.1

  

<强>涉及知识:

  

1.处理程序机制,

  

2。自定义控件+帆布绘画,

  

3。自定义dialog 

  

<强>部分代码:,

        公开课NumberProgressBar扩展视图{/* *   *右侧未完成进度条的颜色   */私人int paintStartColor=0 xffe5e5e5;/* *   * Contxt   */私人上下文语境;/* *   *主线程传过来进程0 - 100   */私人int进展;/* *   *得到自定义视图的宽度   */私人int viewWidth;         私人RectF pieOval;      私人RectF pieOvalIn;/* *   *得到自定义视图的Y轴中心点   */私人int viewCenterY;/* *   *已完成的画笔   */私人涂paintInit=new ();/* *   *未完成进度条画笔的属性   */私人涂paintStart=new ();/* *   *大圆的画笔   */私人涂paintEndBig=new ();/* *   *小圆的画笔   */私人涂paintSmall=new ();/* *   *画中间的百分比文字的画笔   */私人涂paintText=new ();/* *   *要画的文字的宽度   */私人int textWidth;/* *   *画文字时底部的坐标   */私人textBottomY浮动;      私人int smallR;//小圆的半径   私人int bigR;//大圆半径   私人浮动半径;   私人小int;//气泡矩形/* *   *文字总共移动的长度(即从0%到100%的文字左侧移动的长度)   *///私人int totalMovedLength;   公共NumberProgressBar(上下文语境,AttributeSet attrs) {   超级(上下文,attrs);   这一点。上下文=上下文;//构造器中初始化数据   smallR=dip2px(上下文,4);//小圆半径   bigR=dip2px(上下文,8);//大圆半径   半径=dip2px(上下文,10)/2;//进度条高度   ?dip2px(上下文,6);//矩形      initData ();   }/* *   *初始化数据   */私人空间initData () {//未完成进度条画笔的属性   paintStart.setColor (paintStartColor);   paintStart。setStrokeWidth (dip2px(上下文,1));   paintStart.setDither(真正的);   paintStart.setAntiAlias(真正的);   paintStart.setStyle (Paint.Style.FILL);//已完成进度条画笔的属性   paintInit.setColor (context.getResources () .getColor (R.color.blue));   paintInit。setStrokeWidth (dip2px(上下文,1));   paintInit.setAntiAlias(真正的);   paintInit.setDither(真正的);   paintInit.setStyle (Paint.Style.FILL);//小圆画笔   paintSmall.setColor (Color.WHITE);   paintSmall.setAntiAlias(真正的);   paintSmall.setStyle (Paint.Style.FILL);//大圆画笔   paintEndBig.setColor (context.getResources () .getColor (R.color.blue));   paintEndBig.setAntiAlias(真正的);   paintEndBig.setStyle (Paint.Style.FILL);//百分比文字画笔的属性   int paintTextSizePx=sp2px(上下文,11);//设置百分比文字的尺寸   paintText.setColor (context.getResources () .getColor (R.color.blue));   paintText.setTextSize (paintTextSizePx);   paintText.setAntiAlias(真正的);   paintText.setTypeface (Typeface.DEFAULT_BOLD);      }      @Override   保护无效onMeasure (int widthMeasureSpec int heightMeasureSpec) {   超级。onMeasure (widthMeasureSpec heightMeasureSpec);   }         @Override   保护无效onDraw(帆布画布){   super.onDraw(画布);//得到浮动型进度   浮动progressFloat=f/100.0进展;   int viewHeight=getMeasuredHeight();//得到控件的高度      viewWidth=getMeasuredWidth() - 4 *小;      viewCenterY=viewHeight - bigR;      浮动currentMovedLen=viewWidth * progressFloat + 2 *小;      字符串str=进步+“%”;      矩形边界=new矩形();   paintText。getTextBounds (str 0 str.length(),范围);   textWidth=bounds.width ();   textBottomY=bounds.height ();/* *   * 1:绘画的文本   * 2 .距离x的位移   * 3 .距离Y的位移   * 4 .画笔对象   */画布。drawText (str currentMovedLen - textWidth/2,   viewCenterY - smallR/2 - bigR/2 - 2 *小+ textBottomY/2,   paintText);//文字//圆角矩形初始的   画布。drawRoundRect(新RectF(2 *小,viewCenterY半径,currentMovedLen,   viewCenterY +半径)   半径,半径,paintInit);//圆角矩形——进行中   画布。drawRoundRect(新RectF (currentMovedLen viewCenterY半径,viewWidth + 2 *小,   viewCenterY +半径),半径,半径,paintStart);      pieOval=new RectF (currentMovedLen——bigR viewCenterY——bigR currentMovedLen + bigR viewCenterY + bigR);      pieOvalIn=new RectF (currentMovedLen——smallR viewCenterY——smallR currentMovedLen + smallR viewCenterY + smallR);//大圆   画布。drawArc (pieOval 0 360,真的,paintEndBig);//小圆   画布。drawArc (pieOvalIn 0 360,真的,paintSmall);   }/* *   * @param进步外部传进来的当前进度   */公共空间setProgress (int进展){   这一点。进步=进步;   无效();   }      公共静态int dip2px(上下文ctx,浮动dp) {   .density .getDisplayMetrics漂浮密度=ctx.getResources () ();   int px=(int) + 0.5 (dp *密度f);   返回px;   }      公共静态int sp2px(上下文背景下,浮动spValue) {   返回(int) TypedValue.applyDimension (TypedValue。.getDisplayMetrics COMPLEX_UNIT_SP、spValue context.getResources () ());   }   }   

Android实现简洁的应用更新对话框数字进度条