Android 实现Loading弹窗

总结下一个简单的需求,后续需要用到的时候可以直接用。

在我们网络请求,异步加载数据,等待函数回调,数据库的操作等耗时的过程中,这个时候,界面在等待返回数据来进行展示,此时加上一个loading弹窗会显得有好很多。

在一些情况下不加的话,会导致一些后果:

1.用户无法感知我们正在进行的操作,因为此时UI在等待数据返回渲染。

2.ANR,在某些情况下,如果不屏蔽用户点击,用户的其他操作会导致我们的操作中断,甚至导致ANR

那么我一般会用到两种loading弹窗

1.系统的Loading加载弹窗,方便快捷,在不做特定的UI需要下,实现快。

import android.app.ProgressDialog;
import android.content.Context;

public class ProgressDialogUtils {
    private static ProgressDialog progressDialog;//ProgressDialog这个对象你从上面的导入也可以看到,这是Android库自带的

    public static void showProgressDialog(Context context, String message) {
        progressDialog = new ProgressDialog(context);
        progressDialog.setMessage(message);
        progressDialog.setCancelable(false);
        progressDialog.show();
    }

    public static void hideProgressDialog() {
        if (progressDialog != null && progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
    }
}

2.第二种自定义的loading弹窗

首先做一个XML布局


    
    
        
        

        
        
        
        
        
    


界面展示如下:

Android 实现Loading弹窗

2.然后自定义一个Dialog,给图片加一个旋转的动画

import android.app.Dialog
import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.view.Gravity
import android.view.Window
import android.view.WindowManager
import android.view.animation.Animation
import android.view.animation.LinearInterpolator
import android.view.animation.RotateAnimation
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.constraintlayout.widget.ConstraintLayout
import com.example.translateapp.R

class LoadingDialog(context: Context) : Dialog(context) {

    init {
        init()
    }

    private fun init() {
        requestWindowFeature(Window.FEATURE_NO_TITLE)
        setContentView(R.layout.dialog_loading)

        // 设置背景透明
        window?.setBackgroundDrawable(ColorDrawable(android.graphics.Color.TRANSPARENT))

        // 设置全屏
        window?.setLayout(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT
        )
        window?.setGravity(Gravity.CENTER)

        // 添加旋转的loading图片
        val loadingImage: ImageView = findViewById(R.id.loading_img)


        // 添加旋转动画
        val rotateAnimation = RotateAnimation(
            0f, 360f,
            Animation.RELATIVE_TO_SELF, 0.5f,
            Animation.RELATIVE_TO_SELF, 0.5f
        )
        rotateAnimation.duration = 1000
        rotateAnimation.interpolator = LinearInterpolator()
        rotateAnimation.repeatCount = Animation.INFINITE
        loadingImage.startAnimation(rotateAnimation)
    }

    override fun onBackPressed() {
        // 不可取消
    }
}

3.调用:

var loadingDialog = LoadingDialog(this)

loadingDialog.show()

loadingDialog.dismiss()

 

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/1824736991.html