diff --git a/BaseLibrary/src/main/java/com/tfq/library/dialog/LoadingViewAnimation.java b/BaseLibrary/src/main/java/com/tfq/library/dialog/LoadingViewAnimation.java new file mode 100644 index 0000000..93cad00 --- /dev/null +++ b/BaseLibrary/src/main/java/com/tfq/library/dialog/LoadingViewAnimation.java @@ -0,0 +1,194 @@ +package com.tfq.library.dialog; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.drawable.AnimationDrawable; +import android.view.KeyEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatDialog; + +import com.tfq.library.R; + +/** + * 加载进度条弹窗 + * + *
使用示例: + *
+ * // 方式1:显示默认加载动画
+ * MusicLoadingView dialog = new MusicLoadingView(context);
+ * dialog.show();
+ *
+ * // 方式2:显示带消息的加载弹窗
+ * dialog.setMessage("加载中...");
+ * dialog.show();
+ *
+ * // 方式3:一步显示带消息的弹窗
+ * dialog.showMessage("正在处理...");
+ *
+ * // 关闭弹窗
+ * dialog.dismiss();
+ *
+ *
+ * @author TinyHung@outlook.com
+ * @date 2017/3/25 15:16
+ */
+public class LoadingViewAnimation extends AppCompatDialog {
+
+ private final ImageView mLoadingIcon;
+ private final TextView mTextContent;
+ private final TextView mTextViewUp;
+ private final TextView mTextViewDown;
+ private AnimationDrawable mAnimationDrawable;
+ private OnDialogBackListener mOnDialogBackListener;
+
+ @SuppressLint("MissingInflatedId")
+ public LoadingViewAnimation(Context context) {
+ super(context, R.style.CenterDialogAnimationStyle);
+ setContentView(R.layout.library_dialog_progress_animation_layout);
+
+ // 初始化视图
+ mLoadingIcon = findViewById(R.id.music_loading_icon);
+ mTextContent = findViewById(R.id.music_content);
+ mTextViewUp = findViewById(R.id.tv_no_content_up);
+ mTextViewDown = findViewById(R.id.tv_no_content_down);
+
+ // 初始化动画
+ if (mLoadingIcon != null) {
+ mAnimationDrawable = (AnimationDrawable) mLoadingIcon.getDrawable();
+ }
+
+ // 设置弹窗默认不可取消
+ setCanceledOnTouchOutside(false);
+ setCancelable(false);
+ }
+
+ @Override
+ public void show() {
+ super.show();
+ startAnimation();
+ updateContentVisibility();
+ }
+
+ /**
+ * 显示弹窗并设置消息(一步完成显示和设置消息)
+ *
+ * @param message 要显示的消息,为空或null时只显示动画
+ */
+ public void showMessage(String message) {
+ setMessage(message);
+ show();
+ }
+
+ /**
+ * 设置加载消息(可单独调用,不自动显示弹窗)
+ *
+ * @param message 要显示的消息,为空或null时不显示文字内容
+ */
+ public void setMessage(String message) {
+ if (mTextContent != null) {
+ mTextContent.setText(message != null ? message : "");
+ updateContentVisibility();
+ }
+ }
+
+ @Override
+ public void dismiss() {
+ stopAnimation();
+ super.dismiss();
+ }
+
+ /**
+ * 设置返回键监听器
+ *
+ * @param listener 返回键监听器,返回true允许关闭弹窗,false拦截返回键
+ */
+ public void setOnDialogBackListener(OnDialogBackListener listener) {
+ mOnDialogBackListener = listener;
+ }
+
+ /**
+ * 启动加载动画
+ */
+ private void startAnimation() {
+ if (mLoadingIcon != null) {
+ mLoadingIcon.setVisibility(View.VISIBLE);
+ if (mAnimationDrawable != null && !mAnimationDrawable.isRunning()) {
+ mAnimationDrawable.start();
+ }
+ }
+ }
+
+ /**
+ * 停止加载动画
+ */
+ private void stopAnimation() {
+ if (mAnimationDrawable != null && mAnimationDrawable.isRunning()) {
+ mAnimationDrawable.stop();
+ }
+ }
+
+ /**
+ * 更新内容区域的可见性
+ * 当有文字内容时:显示文字,隐藏装饰TextView
+ * 当无文字内容时:隐藏文字,显示装饰TextView
+ */
+ private void updateContentVisibility() {
+ boolean hasContent = hasTextContent();
+
+ // 更新内容文字的可见性
+ if (mTextContent != null) {
+ mTextContent.setVisibility(hasContent ? View.VISIBLE : View.GONE);
+ }
+
+ // 更新装饰TextView的可见性
+ int decorationVisibility = hasContent ? View.GONE : View.VISIBLE;
+ if (mTextViewUp != null) {
+ mTextViewUp.setVisibility(decorationVisibility);
+ }
+ if (mTextViewDown != null) {
+ mTextViewDown.setVisibility(decorationVisibility);
+ }
+ }
+
+ /**
+ * 检查是否有文字内容需要显示
+ *
+ * @return true-有内容,false-无内容
+ */
+ private boolean hasTextContent() {
+ return mTextContent != null
+ && mTextContent.getText() != null
+ && mTextContent.getText().length() > 0;
+ }
+
+ /**
+ * 处理返回键事件,将控制权交给监听器
+ */
+ @SuppressLint("GestureBackNavigation")
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (mOnDialogBackListener != null && !mOnDialogBackListener.isBack()) {
+ // 监听器返回false,拦截返回键
+ return false;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ /**
+ * 返回键监听器接口
+ */
+ public interface OnDialogBackListener {
+ /**
+ * 是否允许返回并关闭弹窗
+ *
+ * @return true-允许返回并关闭弹窗,false-拦截返回键
+ */
+ boolean isBack();
+ }
+}
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_1.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_1.png
new file mode 100644
index 0000000..9613dda
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_1.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_10.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_10.png
new file mode 100644
index 0000000..caffae9
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_10.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_11.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_11.png
new file mode 100644
index 0000000..221088d
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_11.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_12.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_12.png
new file mode 100644
index 0000000..12b9d2a
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_12.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_2.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_2.png
new file mode 100644
index 0000000..41da98b
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_2.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_3.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_3.png
new file mode 100644
index 0000000..9027a9e
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_3.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_4.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_4.png
new file mode 100644
index 0000000..9236147
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_4.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_5.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_5.png
new file mode 100644
index 0000000..9518c5c
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_5.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_6.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_6.png
new file mode 100644
index 0000000..76a42c0
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_6.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_7.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_7.png
new file mode 100644
index 0000000..c752853
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_7.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_8.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_8.png
new file mode 100644
index 0000000..ce9a390
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_8.png differ
diff --git a/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_9.png b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_9.png
new file mode 100644
index 0000000..c1946eb
Binary files /dev/null and b/BaseLibrary/src/main/res/drawable-xhdpi/library_loading_9.png differ
diff --git a/BaseLibrary/src/main/res/drawable/library_dialog_loading_bg_animation.xml b/BaseLibrary/src/main/res/drawable/library_dialog_loading_bg_animation.xml
new file mode 100644
index 0000000..6cd5f7d
--- /dev/null
+++ b/BaseLibrary/src/main/res/drawable/library_dialog_loading_bg_animation.xml
@@ -0,0 +1,12 @@
+
+