短视频商城系统,Android进度条,自定义进度条,显示百分比
短视频商城系统,Android进度条,自定义进度条,显示百分比
1 | /**<br> * 自定义进度条<br> * */ <br> public class JinDuView extends View {<br> private Paint mPaint; //画笔<br> private int canvasHeight; //画板高度<br> private int canvasWidth; //画板宽度<br> private int nowNumber = 0; //当前数字<br> private int maxNumber = 0; //最大数字<br> public JinDuView(Context context, @Nullable AttributeSet attrs) {<br> super(context, attrs);<br> //调用该View方法,这里测试写到这里,使用时 fb 找到控件后调用即可<br> intoData(70);<br> }<br> /**<br> *动态设置数据<br> * */<br> public void intoData(int bigNumber){<br> maxNumber = bigNumber; //获取最大百分比<br> thread.start(); //开启线程<br> }<br> @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)<br> @Override<br> protected void onDraw(Canvas canvas) {<br> super.onDraw(canvas);<br> //画笔<br> mPaint = new Paint();<br> //防锯齿<br> mPaint.setAntiAlias(true);<br> //获取画板高度<br> canvasHeight = getMeasuredHeight();<br> //获取画板宽度<br> canvasWidth = getMeasuredWidth();<br> //设置颜色<br> mPaint.setColor(Color.GREEN);<br> //设置宽度-宽度为画板宽度<br> mPaint.setStrokeWidth(canvasWidth);<br> //画矩形<br> //canvas.drawRect(0, 0, canvasWidth, canvasHeight, mPaint);<br> //画椭圆形<br> canvas.drawRoundRect(0,0,canvasWidth,canvasHeight,30,30,mPaint);<br> //设置颜色<br> mPaint.setColor(Color.BLACK);<br> //画矩形<br> // canvas.drawRect(0,0,canvasWidth/100*nowNumber,canvasHeight,mPaint);<br> //画椭圆形<br> canvas.drawRoundRect(0,0,canvasWidth/100*nowNumber,canvasHeight,30,30,mPaint);<br> //设置文字<br> String str = nowNumber + " %";<br> //设置模板<br> Rect rect = new Rect();<br> //设置字体大小<br> mPaint.setTextSize(24);<br> //设置字体颜色<br> mPaint.setColor(Color.RED);<br> //将文字模板转移到画笔上,此时画笔的属性代表了该文字的属性<br> mPaint.getTextBounds(str,0,str.length(),rect);<br> //画到画板上<br> canvas.drawText(str,canvasWidth/100*nowNumber+5,canvasHeight/2+rect.height()/2,mPaint);<br> }<br> /**<br> * 结束事件<br> * */<br> private void stopThread(){<br>// 这里进行弹窗,附加小知识点:<br>// 问:子线程中能不能吐司?<br>// 答:经源码分析,吐司需要Looper对象,子线程中并没有声明Looper对象,<br>// 所以通过此方法及时添加和解除Looper对象就可以吐司了,奥里给<br> Looper.prepare();<br> Toast.makeText(getContext(),"加载完毕",Toast.LENGTH_SHORT).show();<br> Looper.loop();<br> //结束线程<br> thread.stop();<br> }<br> /**<br> * 通过线程来动态设置View达到动画效果<br> * */<br> private Thread thread = new Thread(){<br> @Override<br> public void run() {<br> while(true){<br> try {<br> /**如果当前数字小于设置的最大数字就一直加<br> * 否则进入结束事件<br> * */<br> if (nowNumber < maxNumber){<br> nowNumber = nowNumber+1;<br> }else {<br> stopThread();<br> }<br> /**休息时间*/<br> Thread.sleep(70);<br> } catch (InterruptedException e) {<br> e.printStackTrace();<br> }<br> /**<br> * 刷新界面 - 无需在UI线程,在工作线程即可被调用,invalidate()必须在UI线程<br> * */<br> postInvalidate();<br> }<br> }<br> };<br>} |
以上就是 短视频商城系统,Android进度条,自定义进度条,显示百分比,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现