Android Loading加载框

   //loading动画
    api 'com.wang.avi:library:2.1.3'

color

    <color name="blue_bg">#0290ff</color>
    <color name="defalut_text">#333333</color>
    <color name="gray_text">#b1b1b1</color>
/**
 * @ClassName: LoadingDialog
 * @Description: 加载框
 * @CreateDate: 2021/7/20 10:11
 * @UpdateUser: RyanLiu
 */

import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;

import com.wang.avi.AVLoadingIndicatorView;

public class LoadingDialog extends Dialog implements View.OnClickListener{
    private AVLoadingIndicatorView avi;

    private TextView tv_text, tv_cancel;

    private CancelListener listener;

    public LoadingDialog(@NonNull Context context) {
        super(context);
        //设置对话框背景透明
        if (getWindow() != null) {
            getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            setContentView(R.layout.dialog_loadding);
            tv_text = findViewById(R.id.tv_text);
            tv_cancel = findViewById(R.id.cancel);
            avi = findViewById(R.id.avi);
            tv_cancel.setOnClickListener(this);
            setCanceledOnTouchOutside(false);
            //            setCancelable(true);
        }
    }

    /**
     * 拦截触碰事件
     * @param event
     * @return
     */
    @Override
    public boolean onTouchEvent(@NonNull MotionEvent event) {
        return true;
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    /**
     * 设置取消按钮点击监听
     */
    public void setListener(CancelListener listener) {
        tv_cancel.setVisibility(View.VISIBLE);
        this.listener = listener;
    }

    /**
     * 为加载进度个对话框设置不同的提示消息
     *
     * @param message 给用户展示的提示信息
     * @return build模式设计,可以链式调用
     */
    public LoadingDialog setMessage(String message) {
        tv_text.setText(message);
        return this;
    }

    /**
     * 显示等待窗,并开始等待动画
     */
    @Override
    public void show() {
        startAnim();
        super.show();
    }

    /**
     * 隐藏等待窗,并停止等待动画
     */
    @Override
    public void dismiss() {
        stopAnim();
        super.dismiss();
    }

    /**
     * 开始等待动画
     */
    void startAnim() {
        avi.show();
        avi.smoothToShow();
    }

    /**
     * 停止等待动画
     */
    void stopAnim() {
        avi.hide();
        // or avi.smoothToHide();
    }

    /**
     * 取消按钮点击事件
     *
     * @param v 组件
     */
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.cancel) {
            dismiss();
            if (this.listener != null) {
                this.listener.onCancel();
                tv_text.setText("正在加载");
                tv_cancel.setVisibility(View.GONE);
                this.listener = null;
            }
        }
    }

    /**
     * 取消按钮监听接口
     */
    public interface CancelListener {
        void onCancel();
    }
}

dialog_loadding

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/dialog_white_bg_shape"
    android:gravity="center">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"

        android:gravity="center">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:orientation="vertical">

            <com.wang.avi.AVLoadingIndicatorView
                android:id="@+id/avi"
                style="@style/AVLoadingIndicatorView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="100dp"
                android:layout_marginTop="16dp"
                android:layout_marginRight="100dp"
                android:visibility="visible"
                app:indicatorColor="#0290ff"
                app:indicatorName="BallSpinFadeLoaderIndicator" />


            <TextView
                android:id="@+id/tv_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="16dp"
                android:gravity="center"
                android:text="正在加载"
                android:textColor="#0290ff"
                android:textSize="16sp" />

            <TextView
                android:id="@+id/cancel"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/print_btn_bg_normal"
                android:gravity="center"
                android:paddingTop="10dp"
                android:paddingBottom="10dp"
                android:text="取消"
                android:textColor="@android:color/white"
                android:textSize="16sp"
                android:visibility="gone" />
        </LinearLayout>
    </RelativeLayout>

</RelativeLayout>

item_function_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:id="@+id/function_ll"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/function_img"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal" />

    <TextView
        android:id="@+id/function_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@color/black" />

</LinearLayout>

dialog_white_bg_shape

<?xml version="1.0" encoding="utf-8"?>

<!-- 按钮正常的时候的背景 -->
<!-- shape的默认形状是rectangle,还有oval(椭圆),line(线),ring(圆环),我就用过rectangle,其他的大家可以试一试 -->

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 矩形的圆角弧度 -->
    <corners android:radius="5dp" />
    <!-- 矩形的填充色 -->
    <solid android:color="@android:color/white" />

    <!-- 矩形的边框的宽度,每段虚线的长度,和两段虚线之间的颜色和颜色 -->
    <!--    <stroke-->
    <!--        android:width="1dp"-->
    <!--        android:dashWidth="8dp"-->
    <!--        android:dashGap="4dp"-->
    <!--        android:color="#4eb621" />-->
</shape>

print_btn_bg_normal

<?xml version="1.0" encoding="utf-8"?>

<!-- 按钮正常的时候的背景 -->
<!-- shape的默认形状是rectangle,还有oval(椭圆),line(线),ring(圆环),我就用过rectangle,其他的大家可以试一试 -->

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 矩形的圆角弧度 -->
    <corners
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"/>
    <!-- 矩形的填充色 -->
    <solid android:color="@color/blue_bg" />

    <!-- 矩形的边框的宽度,每段虚线的长度,和两段虚线之间的颜色和颜色 -->
<!--    <stroke-->
<!--        android:width="1dp"-->
<!--        android:dashWidth="8dp"-->
<!--        android:dashGap="4dp"-->
<!--        android:color="#4eb621" />-->
</shape>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。