前言:现在一般的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数字进度条所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)