-
Notifications
You must be signed in to change notification settings - Fork 139
/
NeteaseLoadMoreView.java
128 lines (114 loc) · 4.06 KB
/
NeteaseLoadMoreView.java
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
package me.jingbin.byrecyclerview.view;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import me.jingbin.byrecyclerview.R;
import me.jingbin.library.BaseLoadMore;
/**
* @author jingbin
*/
public class NeteaseLoadMoreView extends LinearLayout implements BaseLoadMore {
private View viewBottom;
private boolean isShowLoadingMoreHeight = false;
private TextView tvNoMore;
private TextView tvMoreFailed;
private LinearLayout llMoreLoading;
private AnimationDrawable mAnimationDrawable;
private int mState = BaseLoadMore.STATE_COMPLETE;
public NeteaseLoadMoreView(Context context) {
super(context);
initView(context);
}
public void initView(Context context) {
LayoutInflater.from(context).inflate(R.layout.load_more_view_netease, this);
viewBottom = findViewById(R.id.view_bottom);
llMoreLoading = findViewById(R.id.ll_more_loading);
tvNoMore = findViewById(R.id.tv_no_more);
tvMoreFailed = findViewById(R.id.tv_more_failed);
ImageView mIvProgress = findViewById(R.id.iv_progress);
mAnimationDrawable = (AnimationDrawable) mIvProgress.getDrawable();
setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
}
@Override
public void setState(int state) {
this.setVisibility(View.VISIBLE);
switch (state) {
case STATE_LOADING:
llMoreLoading.setVisibility(VISIBLE);
tvNoMore.setVisibility(GONE);
tvMoreFailed.setVisibility(GONE);
if (!mAnimationDrawable.isRunning()) {
mAnimationDrawable.start();
}
break;
case STATE_COMPLETE:
llMoreLoading.setVisibility(VISIBLE);
tvNoMore.setVisibility(GONE);
tvMoreFailed.setVisibility(GONE);
this.setVisibility(View.GONE);
if (mAnimationDrawable.isRunning()) {
mAnimationDrawable.stop();
}
break;
case STATE_NO_MORE:
tvNoMore.setVisibility(VISIBLE);
llMoreLoading.setVisibility(GONE);
tvMoreFailed.setVisibility(GONE);
if (mAnimationDrawable.isRunning()) {
mAnimationDrawable.stop();
}
break;
case STATE_FAILURE:
tvMoreFailed.setVisibility(VISIBLE);
llMoreLoading.setVisibility(GONE);
tvNoMore.setVisibility(GONE);
if (mAnimationDrawable.isRunning()) {
mAnimationDrawable.stop();
}
break;
default:
break;
}
if (isShowLoadingMoreHeight) {
viewBottom.setVisibility(View.VISIBLE);
} else {
viewBottom.setVisibility(View.GONE);
}
mState = state;
}
@Override
public int getState() {
return mState;
}
/**
* 为了部分页面底部实现透明效果,这里提高一个底部栏的高度
* 如果没有可不用理会
*/
@Override
public void setLoadingMoreBottomHeight(float heightDp) {
if (heightDp > 0) {
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, dip2px(heightDp));
viewBottom.setLayoutParams(lp);
isShowLoadingMoreHeight = true;
}
}
/**
* 得到失败的布局,给设置点击重试
*/
@Override
public View getFailureView() {
return tvMoreFailed;
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public int dip2px(float dpValue) {
final float scale = getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}