Android 页面或文件或网络请求时的加载动画

//加载图片或页面或网络请求时出现加载动画

public Class LoadingAnimation{

    private static LoadingAnimation loadingAnimation;

     private AlterDialog alterDialog;

    private LoadingAnimation(){

    }

    public static LoadingAnimation newInstance(){

        if(loadingAnimation == null){

                loadingAnimation = new LoadingAnimation();

        }

        return loadingAnimation;

    }

    //添加加载动画

   public void lock(Context context){

        //用来记录网络请求时的次数

        addCount();

        //当第一次网络请求时加载动画

        if(getCount() == 1){

            if(alterDialog == null){

                AlterDialog.Builder builder = new AlterDialog.Builder(context,R.style.dialog);//加载动画的样式

                //builder.setCancelable(false);//设置加载动画点击屏幕或back键时都不会取消

                 alterDialog = builder.create();

                 alterDialog.setCancledOnTouchOutside(false);//设置点击屏幕是不会取消加载动画,点击back键时取消

                 alterDialog.show();

                 Window window = alterDialog.getWindow();//获得AlterDialog的window

                 window.setContentView(R.layout.lock);//给window设置自定义布局

            }else{

                alterDialog.show();

            }

        }

    }

    //去掉加载动画

    public void unlock(){

        //网络请求结束后减1

        jianCount();

        if(getCount() == 0){//表示所有的网络请求都结束了

            if(alterDialog == null)

                return ;

            alterDialog.diamiss();//隐藏加载动画

        }

        //当统计次数出错时,重置计数

        if(getCount < 0 ){

             resetCount();

        }

    }

    private static int counts = 0;

    public static synchronized void addCount(){ counts++; }

    public static synchronized void jianCount(){ counts--; }

    public static synchronized int getCounts(){ return counts; }

    public static synchronized void resetCounts(){ counts = 0; }

}

styles.xml样式

<resources>
    
    <!-- 两种加载动画的样式 -->
    <style name="NobackDialog"
        parent="@android:style/Theme.Dialog">

        <item
            name="android:windowBackground">#00000000</item>

    </style>

    <style name="dialog" parent="@android:style/Theme.Holo.Dialog">
        <!-- 是否有边框 -->
        <item name="android:windowFrame">@null</item>
        <!--是否在悬浮Activity之上  -->
        <item name="android:windowIsFloating">true</item>
        <!--标题  -->
        <item name="android:windowNoTitle">true</item>
        <!--阴影  -->
        <item name="android:windowIsTranslucent">true</item>
        <!--透明背景 全透明-->
        <item name="android:background">#00000000</item>
        <!--窗口背景透明-->
        <item name="android:windowBackground">#00000000</item>
        <!--弹窗背景是否变暗-->
        <item name="android:backgroundDimEnabled">true</item>
    </style>
</resources>

layout布局 lock.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical">

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:alpha="1"
        />
</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chailongger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值