Android实现简洁的APP更新dialog数字进度条

Android实现简洁的APP更新dialog数字进度条,第1张

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

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

效果: 

 

开发环境:AndroIDStudio2.2.1+gradle-2.14.1

涉及知识:

    1.Handler机制 

    2.自定义控件+Canvas绘画 

    3.自定义dialog 

部分代码: 

public class NumberProgressbar extends VIEw { /**  * 右侧未完成进度条的颜色  */ private int paintStartcolor = 0xffe5e5e5; /**  * Contxt  */ private Context context; /**  * 主线程传过来进程 0 - 100  */ private int progress; /**  * 得到自定义视图的宽度  */ private int vIEwWIDth; private RectF pIEoval; private RectF pIEovalIn; /**  * 得到自定义视图的Y轴中心点  */ private int vIEwCenterY; /**  * 已完成的画笔  */ private Paint paintinit = new Paint(); /**  * 未完成进度条画笔的属性  */ private Paint paintStart = new Paint(); /**  * 大圆的画笔  */ private Paint paintEndBig = new Paint(); /**  * 小圆的画笔  */ private Paint paintSmall = new Paint(); /**  * 画中间的百分比文字的画笔  */ private Paint paintText = new Paint(); /**  * 要画的文字的宽度  */ private int textWIDth; /**  * 画文字时底部的坐标  */ private float textBottomY; private int smallR;//小圆的半径 private int bigR;//大圆半径 private float radius; private int jR;//气泡矩形 /**  * 文字总共移动的长度(即从0%到100%文字左侧移动的长度)  */// private int totalMovedLength; public NumberProgressbar(Context context,AttributeSet attrs) {  super(context,attrs);  this.context = context;  // 构造器中初始化数据  smallR = dip2px(context,4);//小圆半径  bigR = dip2px(context,8);//大圆半径  radius = dip2px(context,10) / 2;//进度条高度  jR = dip2px(context,6);//矩形  initData(); } /**  * 初始化数据  */ private voID initData() {  // 未完成进度条画笔的属性  paintStart.setcolor(paintStartcolor);  paintStart.setstrokeWIDth(dip2px(context,1));  paintStart.setDither(true);  paintStart.setAntiAlias(true);  paintStart.setStyle(Paint.Style.FILL);  // 已完成进度条画笔的属性  paintinit.setcolor(context.getResources().getcolor(R.color.blue));  paintinit.setstrokeWIDth(dip2px(context,1));  paintinit.setAntiAlias(true);  paintinit.setDither(true);  paintinit.setStyle(Paint.Style.FILL);  // 小圆画笔  paintSmall.setcolor(color.WHITE);  paintSmall.setAntiAlias(true);  paintSmall.setStyle(Paint.Style.FILL);  // 大圆画笔  paintEndBig.setcolor(context.getResources().getcolor(R.color.blue));  paintEndBig.setAntiAlias(true);  paintEndBig.setStyle(Paint.Style.FILL);  // 百分比文字画笔的属性  int paintTextSizePx = sp2px(context,11); //设置百分比文字的尺寸  paintText.setcolor(context.getResources().getcolor(R.color.blue));  paintText.setTextSize(paintTextSizePx);  paintText.setAntiAlias(true);  paintText.setTypeface(Typeface.DEFAulT_BolD); } @OverrIDe protected voID onMeasure(int wIDthMeasureSpec,int heightmeasureSpec) {  super.onMeasure(wIDthMeasureSpec,heightmeasureSpec); } @OverrIDe protected voID onDraw(Canvas canvas) {  super.onDraw(canvas);  //得到float型进度  float progressfloat = progress / 100.0f;  int vIEwHeight = getMeasuredHeight();//得到控件的高度  vIEwWIDth = getMeasureDWIDth() - 4 * jR;  vIEwCenterY = vIEwHeight - bigR;  float currentMovedLen = vIEwWIDth * progressfloat + 2 * jR;  String str = progress + "%";  Rect bounds = new Rect();  paintText.getTextBounds(str,str.length(),bounds);  textWIDth = bounds.wIDth();  textBottomY = bounds.height();/** * 1:绘画的文本 * 2.距离x的位移 * 3.距离Y的位移 * 4.画笔对象 */  canvas.drawText(str,currentMovedLen - textWIDth / 2,vIEwCenterY - smallR / 2 - bigR / 2 - 2 * jR + textBottomY / 2,paintText);//文字  //圆角矩形初始的  canvas.drawRoundRect(new RectF(2 * jR,vIEwCenterY - radius,currentMovedLen,vIEwCenterY + radius),radius,paintinit);  //圆角矩形--进行中  canvas.drawRoundRect(new RectF(currentMovedLen,vIEwWIDth + 2 * jR,paintStart);  pIEoval = new RectF(currentMovedLen - bigR,vIEwCenterY - bigR,currentMovedLen + bigR,vIEwCenterY + bigR);  pIEovalIn = new RectF(currentMovedLen - smallR,vIEwCenterY - smallR,currentMovedLen + smallR,vIEwCenterY + smallR);  //大圆  canvas.drawArc(pIEoval,360,true,paintEndBig);  //小圆  canvas.drawArc(pIEovalIn,paintSmall); } /**  * @param progress 外部传进来的当前进度  */ public voID setProgress(int progress) {  this.progress = progress;  invalIDate(); } public static int dip2px(Context ctx,float dp) {  float density = ctx.getResources().getdisplayMetrics().density;  int px = (int) (dp * density + 0.5f);  return px; } public static int sp2px(Context context,float spValue) {  return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,spValue,context.getResources().getdisplayMetrics()); }}

源码下载:dialog数字进度条

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

总结

以上是内存溢出为你收集整理的Android实现简洁的APP更新dialog数字进度条全部内容,希望文章能够帮你解决Android实现简洁的APP更新dialog数字进度条所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存