想写一个简单的loading转圈效果,试了半天出来的结果是水平进度条。麻烦的要死,于是自己写一个自定义View,差不多称得上最简单好用的转圈了。
下面是自定义CustomLoadingView:
package com.nopqrst.hijklmn;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.view.View;
public class CustomLoadingView extends View {
private Paint paint;
private float rotateDegree = 0f;
private ValueAnimator animator;
public CustomLoadingView(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(8f);
paint.setStyle(Paint.Style.STROKE);
paint.setAntiAlias(true);
animator = ValueAnimator.ofFloat(0, 360);
animator.setDuration(1000);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.addUpdateListener(animation -> {
rotateDegree = (float) animation.getAnimatedValue();
invalidate();
});
animator.start();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.rotate(rotateDegree, getWidth() / 2, getHeight() / 2);
canvas.drawArc(new RectF(getWidth()/2-30, getHeight()/2-30, getWidth()/2+30, getHeight()/2+30),
0, 270, false, paint);
}
}
调用方式也很简单:
val progressBar = CustomLoadingView(this).apply {
layoutParams = RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
)
}
var layoutParams:LayoutParams = LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER
addContentView(progressBar,layoutParams);
1877

被折叠的 条评论
为什么被折叠?



