【Android】自定义progressBar和动画显示对号

编写代码时参考了大神的文章 

-----------------------------------------------------------------------------------------------

1.说明:  界面上显示正在加载的提示动画 ,加载完成之后显示对号。

2.显示效果:

 

3.   代码

3.1  为自定义控件添加属性

添加控件属性

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.2  获取自定义的属性

 

public CustomProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomProgressBar,defStyleAttr,0);
        int count = array.getIndexCount();
        for (int i = 0;i < count;i++){
            int arr = array.getIndex(i);
            switch (arr){
                case R.styleable.CustomProgressBar_bgColor:
                    circleColor = array.getColor(arr, Color.BLUE);
                    break;
                case R.styleable.CustomProgressBar_runSpeed:
                    circleSpeed = array.getInt(arr,20);
                    break;
                case R.styleable.CustomProgressBar_paintWidth:
                    circleWidth = array.getDimensionPixelSize(arr, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20, getResources().getDisplayMetrics()));
                    break;
            }
        }
        array.recycle();
}


3.3 画圆弧

 

 

 protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int center = getWidth()/2;//圆心
        int radius = center - circleWidth/2;//半径

        RectF oval = new RectF(circleWidth/2,circleWidth/2,center+radius,center+radius);
        canvas.drawArc(oval,startAngle,progress,false,mPaint);
    }


3.4 动态画圆弧

 

分析: 想要圆弧变化怎么办?

开始画圆弧的位置和圆弧的长度变化。

 

 new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    progress+=1;
                    moveAngle+=0.002;//自定义圆弧其实位置变化的大小
                    startAngle +=moveAngle;
                    if (progress >= (340 +moveAngle)){//如果340-->360  那么圆环闭合才会从新画圆
                            progress = 0;
                            startAngle = START_ANGLE;
                            moveAngle = 0;
                    }
                    postInvalidate();

                    try {
                        Thread.sleep(circleSpeed);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();


4.源码下载

 

资源下载地址


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值