1、自定义loadingline动画

/** * 作者:created by meixi * 邮箱:[email protected] * 日期:2018/9/6 10 */public class LoadingLine extends View {    private Paint paint;    private Paint backPaint;    private Paint textPaint;    private boolean init = false;    private ValueAnimator valueAnimator;    private float param = 0;    private int length = 0;    public LoadingLine(Context context) {        super(context);        init();    }    public LoadingLine(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    private void init() {        paint = new Paint();        paint.setColor(Color.BLUE);        paint.setStrokeWidth(25);        backPaint = new Paint();        backPaint.setColor(Color.RED);        backPaint.setStrokeWidth(25);        textPaint = new Paint();        textPaint.setColor(Color.WHITE);        textPaint.setTextSize(10);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        if (!init) {//            start();            init = true;        }        int width = getWidth();        int height = getHeight();        canvas.drawLine(0, height / 2, width, height / 2, backPaint);        canvas.drawLine(0, height / 2, length * width / 100, height / 2, paint);        if (length<100){            canvas.drawText(length + "", length * width / 100 - 22, height / 2 + 6, textPaint);        }else {            canvas.drawText(length + "", length * width / 100 - 42, height / 2 + 6, textPaint);        }//        if (valueAnimator.isRunning()) {//            param = (float) valueAnimator.getAnimatedValue();//            setLength((int) param);//        }    }    /**     * 也可在外部手动控制进度条,自行关闭valueAnimator     *     * @param param     */    public void setLength(int param) {        this.length = param;        invalidate();    }    private void start() {        if (valueAnimator == null) {            valueAnimator = ValueAnimator.ofFloat(0, 100);            valueAnimator.setInterpolator(new LinearInterpolator());            valueAnimator.setDuration(6000);            valueAnimator.start();        } else {            valueAnimator.start();        }        postDelayed(new Runnable() {            @Override            public void run() {//                start();                invalidate();            }        }, valueAnimator.getDuration());        invalidate();    }}

 

2、activity调用

布局文件

初始化

    private boolean running;    private LoadingLine loadingLine;    int i = 0;    static final int REFRESH_COMPLETE = 0X1112;    private Handler mHandler = new Handler() {        public void handleMessage(android.os.Message msg) {            switch (msg.what) {                case REFRESH_COMPLETE:                    if (i==100){                        running=false;                    }                    Log.i("lgq","...===="+i);                    loadingLine.setLength(i++);//主要加载进度方法//todo...                    break;            }        }    };

线程加载进度

 loadingLine =(LoadingLine)findViewById(R.id.myloadline);new Thread() {    @Override    public void run() {        super.run();        running = true;        while (running) {            mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, 0);            try {                sleep(100);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}.start();

添加圆弧框

                    
<?xml version="1.0" encoding="utf-8"?>                

 

更多相关文章

  1. Android动态加载学习
  2. Android插件化开发之DexClassLoader动态加载dex、jar小Demo
  3. [Android] 开发资料收集:动态加载、插件化、热修复技术
  4. Activity的四种加载模式
  5. android 加载图片轻松避免OOM(out of memory)

随机推荐

  1. Android中调用webservice小结
  2. android使用aidl实现进程间通信的实例
  3. Android(安卓)动画
  4. Android中目的地Intent的使用
  5. greendao3.2.0使用方法(超详细)
  6. Android(安卓)clickable 属性问题
  7. 2019-08-20 Android(安卓)线性布局介绍-L
  8. Android内核剖析
  9. 使用Android(安卓)Studio 3.2编译android
  10. Android圆角按钮的制作方法