直接上代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/bnt_share"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="加载"
tools:ignore="MissingConstraints" />
</LinearLayout>
package com.example.myapplication;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private ImageView img;
private Button bntshare;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bntshare = findViewById(R.id.bnt_share);
initData();
}
private void initData() {
bntshare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoadingDialogUtils loadingDialogUtils = new LoadingDialogUtils(MainActivity.this,"正在登录...",R.mipmap.ic_dialog_loading);
loadingDialogUtils.show();
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="20dp"/>
<solid android:color="@android:color/black"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LoadingDialog" parent="@android:style/Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:gravity="center"
android:background="@drawable/bg_loading_dialog"
android:layout_height="200dp">
<ImageView
android:id="@+id/iv_loading"
android:layout_width="wrap_content"
android:src="@mipmap/ic_dialog_loading"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_loading"
android:layout_width="wrap_content"
android:layout_marginTop="20dp"
android:text="加载中..."
android:textSize="16sp"
android:textColor="@android:color/white"
android:layout_height="wrap_content"/>
</LinearLayout>
package com.example.myapplication;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
public class LoadingDialogUtils extends Dialog {
private static final String TAG = "LoadingDialog";
private String mMessage;
private int mImageId;
private boolean mCancelable;
private RotateAnimation mRotateAnimation;
public LoadingDialogUtils(@NonNull Context context, String message, int imageId) {
this(context,R.style.LoadingDialog,message,imageId,false);
}
public LoadingDialogUtils(@NonNull Context context, int themeResId, String message, int imageId, boolean cancelable) {
super(context, themeResId);
mMessage = message;
mImageId = imageId;
mCancelable = cancelable;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
initView();
}
private void initView() {
setContentView(R.layout.dialog_loading);
// 设置窗口大小
WindowManager windowManager = getWindow().getWindowManager();
int screenWidth = windowManager.getDefaultDisplay().getWidth();
WindowManager.LayoutParams attributes = getWindow().getAttributes();
attributes.alpha = 0.3f;
attributes.width = screenWidth/3;
attributes.height = attributes.width;
getWindow().setAttributes(attributes);
setCancelable(mCancelable);
TextView tv_loading = findViewById(R.id.tv_loading);
ImageView iv_loading = findViewById(R.id.iv_loading);
tv_loading.setText(mMessage);
iv_loading.setImageResource(mImageId);
iv_loading.measure(0,0);
mRotateAnimation = new RotateAnimation(0,360,iv_loading.getMeasuredWidth()/2,iv_loading.getMeasuredHeight()/2);
mRotateAnimation.setInterpolator(new LinearInterpolator());
mRotateAnimation.setDuration(1000);
mRotateAnimation.setRepeatCount(-1);
iv_loading.startAnimation(mRotateAnimation);
}
@Override
public void dismiss() {
mRotateAnimation.cancel();
super.dismiss();
}
@Override
public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
// 屏蔽返回键
return mCancelable;
}
return super.onKeyDown(keyCode, event);
}
}