设置加载失败,正在加载,界面。
来源:互联网 发布:商品标题搜索优化 编辑:程序博客网 时间:2024/05/02 02:29
https://github.com/a284628487/EasyLoading
package com.ccflying.easyloading;
import android.app.Activity;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.animation.Animation;
import android.widget.FrameLayout;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Created by youku on 15/9/14.
*/
public class ActivityLoading {
private static Map<String, WeakReference<View>> map;
private static View.OnClickListener listener;
private static int viewTag = 2131492143;
static {
map = new HashMap<>();
listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
}
};
}
/**
* add loading view to activity
*
* @param activity
* @param layoutId
* @return
*/
public static View showLoading(Activity activity, int layoutId) {
View view = LayoutInflater.from(activity).inflate(layoutId, null);
showLoading(activity, view, true, true, null);
return view;
}
/**
* add loading view to activity
*
* @param activity
* @param layoutId
* @return
*/
public static View showLoading(Activity activity, int layoutId, boolean dimBackground, boolean showAnimation, Animation anim) {
View view = LayoutInflater.from(activity).inflate(layoutId, null);
showLoading(activity, view, dimBackground, showAnimation, anim);
return view;
}
/**
* add loading view to activity
*
* @param activity
* @param view
* @return
*/
public static boolean showLoading(Activity activity, View view) {
return showLoading(activity, view, true, true, null);
}
/**
* add loading view to activity
*
* @param activity
* @param view
* @return
*/
public static boolean showLoading(Activity activity, View view, boolean dimBackground, boolean showAnimation, Animation anim) {
View layout = packingView(activity, view, dimBackground, true);
if (showAnimation) {
if (null == anim) {
anim = LoadingAnimations.getShowingAnimation();
}
if (dimBackground) {
layout.startAnimation(anim);
layout.setTag(viewTag, 0);
} else {
view.startAnimation(anim);
layout.setTag(viewTag, 1);
}
}
return showView(activity, layout, -1, -1, Gravity.CENTER);
}
/**
* packing a view to framelayout
*
* @param activity
* @param view
* @param dimBackground
* @param interceptTouch
* @return
*/
private static View packingView(Activity activity, View view, boolean dimBackground, boolean interceptTouch) {
FrameLayout layout = new FrameLayout(activity);
FrameLayout.LayoutParams lps = new FrameLayout.LayoutParams(-2, -2);
lps.gravity = Gravity.CENTER;
layout.addView(view, lps);
if (dimBackground) {
layout.setBackgroundColor(0x88000000);
}
if (interceptTouch) {
layout.setOnClickListener(listener);
}
return layout;
}
/**
* add emptyView to activity
*
* @param activity
* @param layoutId
* @return
*/
public static View showEmpty(Activity activity, int layoutId) {
View view = LayoutInflater.from(activity).inflate(layoutId, null);
showEmpty(activity, view);
return view;
}
/**
* add emptyView to activity
*
* @param activity
* @param view
* @return
*/
public static boolean showEmpty(Activity activity, View view) {
return showView(activity, packingView(activity, view, false, false), -1, -1, Gravity.CENTER);
}
/**
* add view to activity
*
* @param activity
* @param view
* @param width
* @param height
* @param gravity
* @return
*/
public static boolean showView(Activity activity, View view, int width, int height, int gravity) {
dismiss(activity, true, null);
//
FrameLayout.LayoutParams lps = new FrameLayout.LayoutParams(width, height);
lps.gravity = gravity;
activity.addContentView(view, lps);
// clear reference
clearEmptyReference();
// save reference
WeakReference<View> weakView = new WeakReference<View>(view);
map.put(activity.getClass().getSimpleName(), weakView);
//
return true;
}
/**
* clear reference
*/
private static void clearEmptyReference() {
Set<String> keys = map.keySet();
for (String key : keys) {
WeakReference<View> weakReference = map.get(key);
if (null != weakReference && null == weakReference.get()) {
map.remove(key);
}
}
}
/**
* remove view from activity
*
* @param activity
* @return
*/
public static boolean dismiss(Activity activity) {
return dismiss(activity, true, null);
}
/**
* remove view from activity
*
* @param activity
* @param showAnim
* @param anim
* @return
*/
public static boolean dismiss(Activity activity, boolean showAnim, Animation anim) {
WeakReference<View> weakView = map.remove(activity.getClass().getSimpleName());
if (null == weakView) return false;
//
final View view = weakView.get();
if (null == view) return true;
// view未被回收
ViewParent parent = view.getParent();
if (null != parent)
try {
final ViewGroup parentGroup = (ViewGroup) parent;
view.setOnClickListener(null);
Object tag = view.getTag(viewTag);
if (null == tag || !showAnim) {
parentGroup.removeView(view);
return true;
}
if (null == anim) anim = LoadingAnimations.getDismissingAnimation();
if (tag == 0) {
view.startAnimation(anim);
} else if (view instanceof FrameLayout && ((FrameLayout) view).getChildCount() > 0) {
((FrameLayout) view).getChildAt(0).startAnimation(anim);
}
parentGroup.postDelayed(new Runnable() {
@Override
public void run() {
parentGroup.removeView(view);
}
}, Math.abs(anim.getDuration() - 20));
} catch (Exception e) {
}
return true;
}
/**
* set gravity and margin
*
* @param activity
* @param gravity
* @param leftMargin
* @param topMargin
* @param rightMargin
* @param bottomMargin
*/
public static void setGravityAndMargins(Activity activity, int gravity, int leftMargin,
int topMargin, int rightMargin, int bottomMargin) {
WeakReference<View> weakReference = map.get(activity.getClass().getSimpleName());
if (null != weakReference) {
View view = weakReference.get();
if (null != view) {
view = ((FrameLayout) view).getChildAt(0);
FrameLayout.LayoutParams lps = (FrameLayout.LayoutParams) view.getLayoutParams();
lps.gravity = gravity;
lps.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
view.setLayoutParams(lps);
}
}
}
}
- 设置加载失败,正在加载,界面。
- 正在加载...
- 正在加载......
- 正在加载...
- 实现正在加载中界面的Android库:DynamicBox
- Launcher2 断电重启主界面加载失败/安装第三方应用/卸载应用主界面加载失败
- JavaScript开发——加载在线图片完整功能实现方法(正在加载-加载成功-加载失败)
- ionic开发——加载在线图片完整功能实现方法(正在加载-加载成功-加载失败)
- iOS-UIWebview设置超时、加载失败、重新加载等问题解决
- CScript 错误: 加载设置失败(拒绝访问)
- ViewPager设置预加载界面个数
- Android 加载成功、加载失败、加载中、无数据四个不同界面的切换
- 页面正在加载中 ...
- 正在加载中
- 正在加载1
- 正在加载2
- 正在加载3
- 正在加载4
- 不可变对象和类,变量的作用域
- A1102. Invert a Binary Tree (25)
- ppython None Null区别
- 关于Hive的练习
- Amazon 亚马逊增加 Gamecircle注意事项
- 设置加载失败,正在加载,界面。
- 问与答——人物传记推荐
- 常见排序算法的Java实现代码汇总
- Android-Preproty animation解析
- Android项目实战--【谁是歌手-逻辑实现篇】
- 拥有大量相同结构Activity的项目精简经验—— ReUsableActivity
- ConcurrentHashMap原理分析
- BZOJ2038 2009国家集训队 小Z的袜子(hose) 题解&代码
- 解决Genymotion无法下载虚拟设备的问题