Android一个最简单的转圈loading实现

想写一个简单的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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值