网络等待Loading图

Android – 自定义Loading圆点_第1张图片 Loading.gif
刚开始做这种效果是用xml来画圆形实心点的。
白色圆点

<?xml version="1.0" encoding="utf-8"?>    android:shape="oval" >        

灰色圆点

<?xml version="1.0" encoding="utf-8"?>    android:shape="oval" >        

Loading布局文件

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

使用Timer来修改background

Timer  mTimer = new Timer();        mHandler = new Handler() {            @Override            public void handleMessage(Message msg) {                if(mPosition ==1) {                    mIvDot1.setBackgroundResource(R.drawable.dot_focus);                    mIvDot2.setBackgroundResource(R.drawable.dot_unfocus);                    mIvDot3.setBackgroundResource(R.drawable.dot_unfocus);                    mPosition = 2;                } else if(mPosition == 2) {                    mIvDot1.setBackgroundResource(R.drawable.dot_unfocus);                    mIvDot2.setBackgroundResource(R.drawable.dot_focus);                    mIvDot3.setBackgroundResource(R.drawable.dot_unfocus);                    mPosition = 3;                } else if(mPosition == 3) {                    mIvDot1.setBackgroundResource(R.drawable.dot_unfocus);                    mIvDot2.setBackgroundResource(R.drawable.dot_unfocus);                    mIvDot3.setBackgroundResource(R.drawable.dot_focus);                    mPosition = 1;                }            }        };        mTimer.schedule(new TimerTask() {            @Override            public void run() {                mHandler.sendEmptyMessage(0);            }        }, 0, 400);

这样也是可以达到上面那种效果的,但是总感觉这么写不太符合程序员的风格。。。所以就有了下面的这种写法。

public class LoadingPointView extends View {    public static final int MESSAGE_ID = 0;    //白色圆点    private Paint mWhitePaint;    //绿色圆点    private Paint mGreenPaint;    //半径    private int mRadius;    //下一个被选中的圆点的index    private int mIndex;    private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            ++mIndex;            if (mIndex == 5) {                mIndex = 0;            }            postInvalidate();        }    };    public LoadingPointView(Context context) {        this(context, null);    }    public LoadingPointView(Context context, @Nullable AttributeSet attrs) {        this(context, attrs, 0);    }    public LoadingPointView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initParmas(context);    }    private void initParmas(Context context) {        mWhitePaint = new Paint();        mWhitePaint.setAntiAlias(true);        mWhitePaint.setStyle(Paint.Style.FILL);        mWhitePaint.setColor(ContextCompat.getColor(context, R.color.white));        mGreenPaint = new Paint();        mGreenPaint.setAntiAlias(true);        mGreenPaint.setStyle(Paint.Style.FILL);        mGreenPaint.setColor(ContextCompat.getColor(context, R.color.c_3ec88e));        mPaintWidth = Px2DpUtil.dp2px(context, 2);        mCircleX = Px2DpUtil.dp2px(context, 40);        mCircleY = Px2DpUtil.dp2px(context, 40);        mRadius = Px2DpUtil.dp2px(context, 5);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        for (int i = 0; i < 5; i++) {            //修改圆心x轴坐标,来画出多个圆点            canvas.drawCircle(getHeight() / 2 + mRadius * i * 2 + 5 * i, getHeight() / 2, mRadius, mWhitePaint);        }        //动态修改绿色圆点的位置        canvas.drawCircle(getHeight() / 2 + mRadius * mIndex * 2 + 5 * mIndex, getHeight() / 2, mRadius, mGreenPaint);        //发送消息不断绘制,以达到无限循环的效果        mHandler.sendEmptyMessageDelayed(MESSAGE_ID, 200);    }    //停止动画    @Override    protected void onDetachedFromWindow() {        super.onDetachedFromWindow();        mHandler.removeMessages(MESSAGE_ID);        mHandler = null;    }}

使用方法

    

具体效果和实现就是以上这些内容了。有什么问题可以评论。

快乐生活!快乐工作!快乐编程!

更多相关文章

  1. Android 单击图片切换效果
  2. Android点击水波纹效果
  3. android动画效果2
  4. android实现页面下方的Tab效果 .
  5. Android帧布局实现霓虹灯的效果
  6. 弹球效果动画
  7. Android手势左右滑动效果
  8. android 动态向Gallery中添加图片及倒影&&3D效果
  9. android实现页面下方的Tab效果

随机推荐

  1. android动态加入xml布局并设置id
  2. Android手写数据库框架设计(删改查)
  3. Android-TextView用drawableLeft时,改变文
  4. Android(安卓)SQLiteDatabase帮助类SQLit
  5. Android中截取当前屏幕的功能
  6. Android(安卓)Studio V3.12环境下TV开发
  7. Android(安卓)Studio - 详解build.gradle
  8. View类及其子类
  9. 快速Android开发系列通信篇之EventBus(2)之
  10. pre-network 网络预加载框架,android网络