DevStore首页 > DEV资源 > 源码下载 > 源码详情

高效抽取loading

 
yyqx | 2015-11-23 17:34    浏览量(3914)    评论(0)    收藏(7)
功能分类:工具 支持平台:Android 运行环境:Android
开发语言:Java 开发工具:Eclipse 源码大小:1.54MB
下载源码 314 人下载

源码简介

高效抽取loading,再多的加载页面也不怕。当今的app基本上有两个操作,一个是加载数据 ,一个就是把数据显示到页面上。但如果页面特别的多。就每个页面都要加载数据,就要写 loading 页面。我之前就是用dialog写,抽取出来一个类。哪里需要了就在那里添加以下代码。

源码截图

  • 运行效果图
DevStore所有源码来自用户上传分享,版权问题及牵扯到商业纠纷均与DevStore无关。

源码片段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
package com.example.every_text.view;
 
import com.wang.cn.manager.ThreadManager;
import com.wang.cn.utils.UIUtils;
 
import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
 
/**
 * 先加顺序 load -->showPagerView-->createSuccessView
 *
 * @author wanghao
 *
 *在子类中 耗时操作放到 load中,然后load返回一个状态,在showPagerView中根据状态选择 显示的页面
 *如果装在是成功的。那么久显示 createSuccessView
 */
public abstract class LoadingPager extends FrameLayout {
 
    // 加载默认的状态
    private static final int STATE_UNLOADED = 1;
    // 加载的状态
    private static final int STATE_LOADING = 2;
    // 加载失败的状态
    private static final int STATE_ERROR = 3;
    // 加载空的状态
    private static final int STATE_EMPTY = 4;
    // 加载成功的状态
    private static final int STATE_SUCCEED = 5;
 
    private View mLoadingView;// 转圈的view
    private View mErrorView;// 错误的view
    private View mEmptyView;// 空的view
    private View mSucceedView;// 成功的view
 
    private int mState;// 默认的状态
 
    private int loadpage_empty;
    private int loadpage_error;
    private int loadpage_loading;
 
    public LoadingPager(Context context, int loading, int error, int empty) {
        super(context);
        loadpage_empty = empty;
        loadpage_error = error;
        loadpage_loading = loading;
        init();
    }
 
    public LoadingPager(Context context, AttributeSet attrs, int defStyle,
            int loading, int error, int empty) {
        super(context, attrs, defStyle);
        loadpage_empty = empty;
        loadpage_error = error;
        loadpage_loading = loading;
        init();
    }
 
    public LoadingPager(Context context, AttributeSet attrs, int loading,
            int error, int empty) {
        super(context, attrs);
 
        init();
    }
    private void init() {
        // 初始化状态
        mState = STATE_UNLOADED;
        // 初始化三个 状态的view 这个时候 三个状态的view叠加在一起了
        mLoadingView = createLoadingView();
        if (null != mLoadingView) {
            addView(mLoadingView, new LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.MATCH_PARENT));
        }
        mErrorView = createErrorView();
        if (null != mErrorView) {
            addView(mErrorView, new LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.MATCH_PARENT));
        }
        mEmptyView = createEmptyView();
        if (null != mEmptyView) {
            addView(mEmptyView, new LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.MATCH_PARENT));
        }
        showSafePagerView();
    }
    private void showSafePagerView() {
        // 直接运行到主线程
        UIUtils.runInMainThread(new Runnable() {
            @Override
            public void run() {
                showPagerView();
            }
        });
    }
    private void showPagerView() {
 
        // 這個時候 都不為空 mState默認是STATE_UNLOADED狀態所以只顯示 lodaing 下面的 error
        // 和empty暂时不显示
        if (null != mLoadingView) {
            mLoadingView.setVisibility(mState == STATE_UNLOADED
                    || mState == STATE_LOADING ? View.VISIBLE :
 
            View.INVISIBLE);
        }
        if (null != mErrorView) {
            mErrorView.setVisibility(mState == STATE_ERROR ? View.VISIBLE
                    : View.INVISIBLE);
        }
        if (null != mEmptyView) {
            mEmptyView.setVisibility(mState == STATE_EMPTY ? View.VISIBLE
                    : View.INVISIBLE);
        }
 
        if (mState == STATE_SUCCEED && mSucceedView == null) {
            mSucceedView = createSuccessView();
            addView(mSucceedView, new LayoutParams
 
            (LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        }
        if (null != mSucceedView) {
            mSucceedView.setVisibility(mState == STATE_SUCCEED ?
 
            View.VISIBLE : View.INVISIBLE);
        }
    }
    public void show() {
        // 第一次进来肯定要 转圈的 所以就算是 error和empty 也要让状态是 unload
        if (mState == STATE_ERROR || mState == STATE_EMPTY) {
            mState = STATE_UNLOADED;
        }
        // 如果是unload 就把状态 变为 loading了 这时候从服务器拿数据
        if (mState == STATE_UNLOADED) {
            mState = STATE_LOADING;
 
            TaskRunnable task = new TaskRunnable();
            ThreadManager.getLongPool().execute(task);
        }
        showSafePagerView();
    }
    /**
     * 制作界面
     *
     * @return
     */
    protected abstract View createSuccessView();
 
    /**
     * 处理下载 耗时操作
     *
     * @return
     */
    protected abstract LoadResult load();
 
    /**
     * 空界面
     *
     * @return
     */
    public View createEmptyView() {
        if (loadpage_empty != 0) {
            return UIUtils.inflate(loadpage_empty);
        }
        return null;
 
    }
 
    /**
     * 失败的页面
     *
     * @return
     */
    public View createErrorView() {
        if (loadpage_empty != 0) {
            return UIUtils.inflate(loadpage_error);
        }
        return null;
    }
 
    /**
     * 正在旋转的页面
     *
     * @return
     */
    public View createLoadingView() {
        if (loadpage_empty != 0) {
            return UIUtils.inflate(loadpage_loading);
        }
        return null;
    }
 
    class TaskRunnable implements Runnable {
        @Override
        public void run() {
            final LoadResult loadResult = load();
            SystemClock.sleep(500);
            UIUtils.runInMainThread(new Runnable() {
                @Override
                public void run() {
                    mState = loadResult.getValue();
                    showPagerView();
                }
            });
        }
    }
    public enum LoadResult {
        ERROR(3), EMPTY(4), SUCCESS(5);
        int value;
 
        LoadResult(int value) {
            this.value = value;
        }
 
        public int getValue() {
            return value;
        }
    }
}
下面是如何使用了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.wang.cn.base;
 
import com.example.every_text.view.LoadingPager;
import com.example.every_text.view.LoadingPager.LoadResult;
import com.wang.cn.R;
import com.wang.cn.utils.UIUtils;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
 
/**
 * @author wang
 * @version 创建时间:2015年7月8日 上午11:31:11 类说明 activity的基类
 */
public abstract class BaseActivity extends Activity {
    public LoadingPager loadingPage;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        loadingPage = new LoadingPager(UIUtils.getContext(),
                R.layout.loadpage_loading, R.layout.loadpage_error,
                R.layout.loadpage_empty)//加载了三个页面
        {
            @Override
            protected LoadResult load() {
                return BaseActivity.this.load();//传递给子类
            }
            @Override
            protected View createSuccessView() {
                return BaseActivity.this.createSuccessView();//传递给子类
            }
        };
//      可以点击
        loadingPage.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                loadingPage.show();
            }
        });
//      显示 loading的页面
        loadingPage.show();
        setContentView(loadingPage);
    }
 
    /**
     * 刷新页面工程
     *
     * @return
     */
    protected abstract View createSuccessView();
 
    /**
     * 请求服务器 获取当前状态
     *
     */
    protected abstract LoadResult load();
 
}
逼格的来了 基类调用父类怎样呢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.wang.cn;
 
import android.content.Intent;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
 
import com.example.every_text.view.LoadingPager.LoadResult;
import com.wang.cn.base.BaseActivity;
import com.wang.cn.utils.UIUtils;
import com.wang.cn.utils.ViewUtils;
 
/**
 * @author wang
 * @version 创建时间:2015年7月8日 上午11:31:11 类说明 主函数
 */
public class MainActivity extends BaseActivity {
    // 刷新页面工程
    @Override
    protected View createSuccessView() {
        View inflate = UIUtils.inflate(R.layout.activity_main);
 
        TextView tv=ViewUtils.findViewById(inflate, R.id.textView1);
        tv.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(UIUtils.getContext(),FragmetActivity.class);
                startActivity(intent);
            }
        });
        return inflate;
    }
 
    // 刷新页面工程
    @Override
    protected LoadResult load() {
        SystemClock.sleep(2000);
        return LoadResult.SUCCESS;
    }
}
  •   赞(0) 赞 +1 赞(0) 已赞
  •   收藏(7) 收藏 +1 已收藏 取消
  •   下载(314)
评论(0)
  • 推荐
  • 审核
  • 收录
  • 获取活力值

源码上传作者

  • 140 能力值
  • 26 源码
  • 0 评测
  • 0 资料

热门源码