ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

短视频商城系统,Android进度条,自定义进度条,显示百分比

2022-06-21 14:35:58  阅读:159  来源: 互联网

标签:自定义 进度条 canvasHeight nowNumber mPaint canvasWidth 线程 Android


短视频商城系统,Android进度条,自定义进度条,显示百分比

 

/**
 *           自定义进度条
 * */
public class JinDuView extends View {
    private Paint mPaint; //画笔
    private int canvasHeight; //画板高度
    private int canvasWidth; //画板宽度
    private int nowNumber = 0; //当前数字
    private int maxNumber = 0; //最大数字
    public JinDuView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        //调用该View方法,这里测试写到这里,使用时 fb 找到控件后调用即可
        intoData(70);
    }
    /**
     *动态设置数据
     * */
    public void intoData(int bigNumber){
        maxNumber = bigNumber; //获取最大百分比
        thread.start(); //开启线程
    }
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //画笔
        mPaint = new Paint();
        //防锯齿
        mPaint.setAntiAlias(true);
        //获取画板高度
        canvasHeight = getMeasuredHeight();
        //获取画板宽度
        canvasWidth = getMeasuredWidth();
        //设置颜色
        mPaint.setColor(Color.GREEN);
        //设置宽度-宽度为画板宽度
        mPaint.setStrokeWidth(canvasWidth);
        //画矩形
        //canvas.drawRect(0, 0, canvasWidth, canvasHeight, mPaint);
        //画椭圆形
        canvas.drawRoundRect(0,0,canvasWidth,canvasHeight,30,30,mPaint);
        //设置颜色
        mPaint.setColor(Color.BLACK);
        //画矩形
        // canvas.drawRect(0,0,canvasWidth/100*nowNumber,canvasHeight,mPaint);
        //画椭圆形
        canvas.drawRoundRect(0,0,canvasWidth/100*nowNumber,canvasHeight,30,30,mPaint);
        //设置文字
        String str = nowNumber + " %";
        //设置模板
        Rect rect = new Rect();
        //设置字体大小
        mPaint.setTextSize(24);
        //设置字体颜色
        mPaint.setColor(Color.RED);
        //将文字模板转移到画笔上,此时画笔的属性代表了该文字的属性
        mPaint.getTextBounds(str,0,str.length(),rect);
        //画到画板上
        canvas.drawText(str,canvasWidth/100*nowNumber+5,canvasHeight/2+rect.height()/2,mPaint);
    }
    /**
     * 结束事件
     * */
    private void stopThread(){
//        这里进行弹窗,附加小知识点:
//        问:子线程中能不能吐司?
//        答:经源码分析,吐司需要Looper对象,子线程中并没有声明Looper对象,
//        所以通过此方法及时添加和解除Looper对象就可以吐司了,奥里给
        Looper.prepare();
        Toast.makeText(getContext(),"加载完毕",Toast.LENGTH_SHORT).show();
        Looper.loop();
        //结束线程
        thread.stop();
    }
    /**
     * 通过线程来动态设置View达到动画效果
     * */
    private Thread thread = new Thread(){
        @Override
        public void run() {
            while(true){
                try {
                    /**如果当前数字小于设置的最大数字就一直加
                     * 否则进入结束事件
                     * */
                    if (nowNumber < maxNumber){
                        nowNumber = nowNumber+1;
                    }else {
                        stopThread();
                    }
                    /**休息时间*/
                    Thread.sleep(70);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                /**
                 * 刷新界面 - 无需在UI线程,在工作线程即可被调用,invalidate()必须在UI线程
                 * */
                postInvalidate();
            }
        }
    };
}

以上就是 短视频商城系统,Android进度条,自定义进度条,显示百分比,更多内容欢迎关注之后的文章

 

标签:自定义,进度条,canvasHeight,nowNumber,mPaint,canvasWidth,线程,Android
来源: https://www.cnblogs.com/yunbaomengnan/p/16396692.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有