Android实现下载进度条图标效果

我们在开发中 有时候会遇到 点击一个图标然后进行下载 并且需要在图标上面加上进度条 像下面这样的效果
这里写图片描述

先说下这个效果的实现,首先我们使用自定义view,在onDraw()方法中使用画笔画出外面的进度条

        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.rgb(0xe9, 0xe9, 0xe9));
        canvas.drawColor(Color.TRANSPARENT);
        mPaint.setStrokeWidth(mWidth);
        mPaint.setStyle(Paint.Style.STROKE);

        mRectF.right = width/2 + mRadius;
        mRectF.left = width/2-mRadius;
        mRectF.bottom = height/2 + mRadius;
        mRectF.top = height/2-mRadius;
        canvas.drawArc(mRectF, -90, 360, false, mPaint);
        mPaint.setColor(mColor);
        canvas.drawArc(mRectF, -90, ((float) mProgress / mMaxProgress) * 360,
                false, mPaint);

其中mProgress 和mMaxProgress就是控制进度条的完成情况。使用下载时,通过设置mProgress 的大小,来完成进度条的更新。我在demo中模拟的是假数据,使用Timer来模拟下载更新。

 Handler mhandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    if (mProgress < mMaxProgress)
                        mProgress++;
                    else {
                        isLoading = false;
                        mProgress = 0;
                        timer.cancel();
                    }
                    invalidate();
                    break;
            }
        }
    };

    @Override
    public void onClick(View v) {
        if (isLoading) {
            timer.cancel();
        } else {
            timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    mhandler.sendEmptyMessage(1);
                }
            }, 200, 200);
        }
        isLoading = !isLoading;
    }

基本上都讲的差不多,大体就是这么个原理 ,大家可以通过我这个demo来进行更改,达到大家想实现的效果。下面是demo的地址
http://download.csdn.net/detail/baidu_33853807/9879089

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中的进度条通常使用 ProgressBar 控件来实现。ProgressBar 控件默认使用一个圆圈形的图标来表示进度,但也可以自定义图标。 要自定义进度图标,可以使用 setIndeterminateDrawable() 方法来设置不确定进度条的图标,使用 setProgressDrawable() 方法来设置确定进度条的图标。例如,以下代码将一个自定义的 Drawable 设置为 ProgressBar 控件的进度图标: ```java ProgressBar progressBar = findViewById(R.id.progress_bar); Drawable customDrawable = getResources().getDrawable(R.drawable.custom_progress_drawable); progressBar.setIndeterminateDrawable(customDrawable); ``` 其中,R.drawable.custom_progress_drawable 是一个自定义的 Drawable 对象,可以在 res/drawable 目录下创建一个 XML 文件来定义该 Drawable。例如,以下是一个简单的 XML 文件,用于定义一个带有旋转动画的圆形进度条: ```xml <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%"> <shape android:shape="ring" android:thicknessRatio="10" android:useLevel="false"> <size android:width="48dp" android:height="48dp" /> <gradient android:type="sweep" android:startColor="#FFFFFF" android:endColor="#00FF00" android:angle="0"/> </shape> </rotate> ``` 将该文件保存为 custom_progress_drawable.xml,并将其放置在 res/drawable 目录下,即可在代码中引用该 Drawable。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值