自定义 Android loading 加载框。

来源:互联网 发布:淘宝微淘话题在哪里找 编辑:程序博客网 时间:2024/05/01 02:52

原创文章,转载请注明出处。

去年写了一个加载框,一直放在那,今年无意中看到这个,突然觉得还可以,无意中撞脸Win10的加载框(后者脸皮),写个博客,分享出来吧,先来看看效果吧。

怎样使用

第一步:将maven { url ‘https://jitpack.io’ }加入的你项目根目录的build.gradle

allprojects {    repositories {        maven { url 'https://jitpack.io' }    }   }

第二步:添加依赖

dependencies {   compile 'com.github.wangzaizhou:progressbarlibrary:v1.0'   }

第三步:使用

PgDialog pd=PgDialog.newInstance(context);    if(!pd.isShowing()){        pd.show("正在下载中...");//显示加载框        pd.setData(10);//百分比    }       pd.dismiss();//取消加载框

下面来看看如何去实现这个效果:

1. 绘制最主要的部分,下面通过自定义view的方式去绘制中间的加载框。

安卓view的绘制过程大体涉及三大过程:

  1. 测量 (onMeasure)
  2. 布局(onLayout)
  3. 绘制(onDraw)

    具体过程请读者自行百度,在此不再赘述,完整代码会在本文结尾贴出,有兴趣的可以看看,以下大体讲讲思路。
    新建 ProgressBarView继承View:

public class ProgressBarView extends View {}

我们需要重写View的三个构造方法。
如果你想在xml中使用自定义view,记得重写第二个或第三个构造方法。
然后初始化画笔、画布等。
开始绘制背景,直接一个圆角矩形,画笔颜色选白色,带上透明度,抗锯齿。

RectF rectF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());canvas.drawRoundRect(rectF, 10, 10, paintm);

背景绘制完了,接下来就是绘制小圆点了。安卓绘制圆有个Canvas.drawCircle(float cx, float cy, float radius, Paint paint)方法,
看下要传的四个参数:

  1. float cx 要绘制的圆的中心的x坐标
  2. float cy 要绘制的圆的中心的y坐标
  3. float radius 要绘制的圆的半径
  4. Paint paint 画笔

    绘制一个圆点很简单,接下来我们要绘制多个圆点。并让它们在同一个圆周上。
    接下来确定一个圆心,并设定这个圆的半径为R,我们在这个圆的圆周上绘制小圆点,刚才说了安卓绘制圆的方法drawCircle;为了保证小圆点在圆周上,只要给drawCircle传的cx、cy符合(cx)²+(cy)²=R²就可以。这样我们只要改变cx,就可以得到一个cy。并且绘制的小圆点在同一个圆周上。
    让小圆点动起来,调用安卓的invalidate();方法,改变cx就可了。
    接下来就是绘制文字了,比较简单了, canvas.drawText;

2. 接下来用AlertDialog去加载写好得view,具体的代码中已经写好了。

代码地址