短视频商城系统,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进度条,自定义进度条,显示百分比,更多内容欢迎关注之后的文章

 

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/tech/273254.html

(0)
上一篇 2022年7月10日 03:29
下一篇 2022年7月10日 03:29

相关推荐

发表回复

登录后才能评论