在开发的时候需要一个加载中的动画,一般的做法是将一张UI给的图片使用动画使其旋转,还有一种做法是用自定义ImageView去实现。
完整代码(代码里面都有详细的注释):
public class LoadingView extends ImageView {
//旋转角度
private int rotateDegree = 0;
//是否需要旋转
private boolean mNeedRotate = false;
public LoadingView(Context context) {
this(context, null);
}
public LoadingView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public LoadingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//设置图标,设置自己想要旋转的图片
setImageResource(R.drawable.loading);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mNeedRotate = true;
//绑定到windows的时候
post(new Runnable() {
@Override
public void run() {
rotateDegree += 30;
rotateDegree = rotateDegree <= 360 ? rotateDegree : 0;
invalidate();
//是否继续旋转,控制旋转的速度
if (mNeedRotate) {
postDelayed(this,100);
}
}
});
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
//从window中解绑了
mNeedRotate = false;
}
@Override
protected void onDraw(Canvas canvas) {
/**
* 第一个参数是旋转角度
* 第二个参数是旋转的X坐标
* 第三个参数是旋转的Y坐标
*/
canvas.rotate(rotateDegree,getWidth()/2,getHeight()/2);
super.onDraw(canvas);
}
}