//加载图片或页面或网络请求时出现加载动画
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>