LoadingDialog 的简单使用 【Dialog案例一】

在这里插入图片描述
LoadingActivity.class

public class LoadingActivity extends Activity {
    private LoadingDialog mLoadingDialog;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loading);
        initDialog();
    }

    private void initDialog() {
        mLoadingDialog = new LoadingDialog(this, R.style.Dialog_Fullscreen);
        mLoadingDialog.show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

styles.xml 此处dialog类型可以设置为固定模板

   <style name="Dialog_Fullscreen">
        <item name="android:windowIsFloating">true</item> //解决dialog.setCanceledOnTouchOutside的问题
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->//dialog的背景一定要设置为透明,不然再设置为其他颜色背景是总是无效的。
    </style>

LoadingDialog.class

public class LoadingDialog extends Dialog {
    private ImageView mLoadingView;

    public LoadingDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_loading);
        mLoadingView = findViewById(R.id.loading_iv);
        ((AnimationDrawable) mLoadingView.getBackground()).start();
        WindowManager.LayoutParams attributes = getWindow().getAttributes();
        attributes.dimAmount = 0.6f;
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        setCanceledOnTouchOutside(true);
    }

    @Override
    protected void onStop() {
        super.onStop();
        ((AnimationDrawable) mLoadingView.getBackground()).stop();
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/d300"
    android:layout_height="@dimen/d300"
    android:layout_gravity="center"
    android:background="@drawable/loading_dialog_bg"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/loading_iv"
        android:layout_width="@dimen/d120"
        android:layout_height="@dimen/d120"
        android:background="@mipmap/list_loading_01"/>
        // android:background="@drawable/loading"

    <TextView
        android:id="@+id/tv_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="连接中..."
        android:textColor="@color/color_white"
        android:textSize="16sp"/>
</LinearLayout>

知识点一:动画的显示
显示方式①: 将动画列表作为loading的背景,并设置动画开始和停止。

loading.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/list_loading" android:duration="80"/>
<item android:drawable="@mipmap/list_loading_01" android:duration="80"/>
<item android:drawable="@mipmap/list_loading_02" android:duration="80"/>
<item android:drawable="@mipmap/list_loading_03" android:duration="80"/>
<item android:drawable="@mipmap/list_loading_04" android:duration="80"/>
<item android:drawable="@mipmap/list_loading_05" android:duration="80"/>
<item android:drawable="@mipmap/list_loading_06" android:duration="80"/>
<item android:drawable="@mipmap/list_loading_07" android:duration="80"/>
</animation-list>

在这里插入图片描述
fragment_loading.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/d300"
    android:layout_height="@dimen/d300"
    android:layout_gravity="center"
    android:background="@drawable/loading_dialog_bg"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/loading_iv"
        android:layout_width="@dimen/d120"
        android:layout_height="@dimen/d120"
        android:background="@drawable/loading"/>

    <TextView
        android:id="@+id/tv_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="连接中..."
        android:textColor="@color/color_white"
        android:textSize="16sp"/>
</LinearLayout>

设置开启及关闭动画

((AnimationDrawable) mLoadingView.getBackground()).start();
((AnimationDrawable) mLoadingView.getBackground()).stop();

显示方式②:使用一张图片进行无限旋转,产生动画效果

rotate_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
        android:duration="1000"//fromDegrees 到 toDegrees 角度所花费的时间,通常设置为1000
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"//设置旋转速度,此处为匀速
        android:pivotX="50%" //旋转中心的X坐标
        android:pivotY="50%" //旋转中心的Y坐标
        android:repeatCount="infinite" //重复的次数,默认为0,必须是int,可以为-1表示不停止
        android:toDegrees="360"
     />
</set>
     //android:repeatMode 重复的模式,默认为restart,即重头开始重新运行,可以为reverse即从结束开始向前重新运行。在android:repeatCount大于0或为infinite时生效
        mLoadingView = findViewById(R.id.loading_iv);
        Animation rotateAnimation = AnimationUtils.loadAnimation(mContext, R.anim.rotate_anim);
       rotateAnimation.setInterpolator(new LinearInterpolator());//设置轮播的不进行停顿
        mLoadingView.startAnimation(rotateAnimation);

知识点二:setCanceledOnTouchOutside失效的解决

        <item name="android:windowIsFloating">true</item>

遇坑的地方:之前设置dialog的背景的时候,总是不成功,因为没有将dialog的默认背景设置为透明,即style.xm中 Dialog_Fullscreen的属性一定要有以下item.

   <item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值