Skip to content

Commit 4a8907f

Browse files
committed
support animation settings
1 parent f7ff63a commit 4a8907f

4 files changed

Lines changed: 89 additions & 13 deletions

File tree

multistatelayout/src/main/java/cn/refactor/multistatelayout/MultiStateConfiguration.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,44 +31,77 @@ public static class Builder {
3131
private int mErrorResId = -1;
3232
private int mLoadingResId = -1;
3333
private int mNetworkErrorResId = -1;
34+
private int mAnimDuration = 300;
35+
private boolean mAnimEnable;
3436

3537
public Builder() {
3638
}
3739

40+
@SuppressWarnings("unused")
3841
public Builder setCommonEmptyLayout(@LayoutRes int resId) {
3942
mEmptyResId = resId;
4043
return this;
4144
}
4245

46+
@SuppressWarnings("unused")
4347
public Builder setCommonLoadingLayout(@LayoutRes int resId) {
4448
mLoadingResId = resId;
4549
return this;
4650
}
4751

52+
@SuppressWarnings("unused")
4853
public Builder setCommonErrorLayout(@LayoutRes int resId) {
4954
mErrorResId = resId;
5055
return this;
5156
}
5257

58+
@SuppressWarnings("unused")
5359
public Builder setCommonNetworkErrorLayout(@LayoutRes int resId) {
5460
mNetworkErrorResId = resId;
5561
return this;
5662
}
5763

64+
@SuppressWarnings("unused")
65+
public Builder setAnimDuration(int duration) {
66+
mAnimDuration = duration;
67+
return this;
68+
}
69+
70+
@SuppressWarnings("unused")
71+
public Builder setAnimEnable(boolean animEnable) {
72+
mAnimEnable = animEnable;
73+
return this;
74+
}
75+
76+
@SuppressWarnings("unused")
5877
public int getCommonEmptyLayout() {
5978
return mEmptyResId;
6079
}
6180

81+
@SuppressWarnings("unused")
6282
public int getCommonLoadingLayout() {
6383
return mLoadingResId;
6484
}
6585

86+
@SuppressWarnings("unused")
6687
public int getCommonErrorLayout() {
6788
return mErrorResId;
6889
}
6990

91+
@SuppressWarnings("unused")
7092
public int getCommonNetworkErrorLayout() {
7193
return mNetworkErrorResId;
7294
}
95+
96+
@SuppressWarnings("unused")
97+
public int getAnimDuration() {
98+
return mAnimDuration;
99+
}
100+
101+
@SuppressWarnings("unused")
102+
public boolean isAnimEnable() {
103+
return mAnimEnable;
104+
}
105+
73106
}
74107
}

multistatelayout/src/main/java/cn/refactor/multistatelayout/MultiStateLayout.java

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,8 @@
4141
*/
4242
public class MultiStateLayout extends FrameLayout {
4343

44+
private static final int DEFAULT_ANIM_DURATION = 300;
4445
private static MultiStateConfiguration.Builder mCommonConfiguration;
45-
private static final int DEFAULT_ANIM_DURATION = 400;
46-
private static final boolean DEFAULT_ANIM_ENABLE = true;
47-
4846
private View mContentView;
4947
private View mLoadingView;
5048
private View mEmptyView;
@@ -63,7 +61,7 @@ public class MultiStateLayout extends FrameLayout {
6361

6462
@IntDef({State.CONTENT, State.EMPTY, State.LOADING, State.ERROR, State.NETWORK_ERROR})
6563
@Retention(RetentionPolicy.SOURCE)
66-
public @interface State {
64+
public @interface State {
6765
int CONTENT = 0;
6866
int EMPTY = 1;
6967
int LOADING = 2;
@@ -99,8 +97,8 @@ private void init(AttributeSet attrs) {
9997
mLoadingResId = ta.getResourceId(R.styleable.MultiStateLayout_layout_loading, getCommonLayoutResIdByState(State.LOADING));
10098
mNetworkErrorResId = ta.getResourceId(R.styleable.MultiStateLayout_layout_network_error, getCommonLayoutResIdByState(State.NETWORK_ERROR));
10199

102-
mAnimEnable = ta.getBoolean(R.styleable.MultiStateLayout_animEnable, DEFAULT_ANIM_ENABLE);
103-
mAnimDuration = ta.getInt(R.styleable.MultiStateLayout_animDuration, DEFAULT_ANIM_DURATION);
100+
mAnimEnable = ta.getBoolean(R.styleable.MultiStateLayout_animEnable, isCommonAnimEnable());
101+
mAnimDuration = ta.getInt(R.styleable.MultiStateLayout_animDuration, getCommonAnimDuration());
104102
ta.recycle();
105103

106104
mInflater = LayoutInflater.from(getContext());
@@ -130,6 +128,7 @@ protected void onDetachedFromWindow() {
130128
*
131129
* @param builder MultiStateConfiguration.Builder
132130
*/
131+
@SuppressWarnings("unused")
133132
public static void setConfiguration(MultiStateConfiguration.Builder builder) {
134133
mCommonConfiguration = builder;
135134
}
@@ -324,6 +323,41 @@ public View getNetworkErrorView() {
324323
return mNetworkErrorView;
325324
}
326325

326+
/**
327+
* Open/close optional animation
328+
* @param animEnable open/close
329+
*/
330+
@SuppressWarnings("unused")
331+
public void setAnimEnable(boolean animEnable) {
332+
mAnimEnable = animEnable;
333+
}
334+
335+
/**
336+
* Get animation status
337+
* @return enable
338+
*/
339+
@SuppressWarnings("unused")
340+
public boolean isAnimEnable() {
341+
return mAnimEnable;
342+
}
343+
344+
/**
345+
* Set animation duration
346+
* @param duration duration
347+
*/
348+
@SuppressWarnings("unused")
349+
public void setAnimDuration(int duration) {
350+
mAnimDuration = duration;
351+
}
352+
353+
/**
354+
* Get animation duration
355+
*/
356+
@SuppressWarnings("unused")
357+
public int getAnimDuration() {
358+
return mAnimDuration;
359+
}
360+
327361
private void clearTargetViewAnimation() {
328362
if (null != mAlphaAnimator && mAlphaAnimator.isRunning()) {
329363
mAlphaAnimator.cancel();
@@ -492,16 +526,24 @@ private void showNetworkErrorView() {
492526
private int getCommonLayoutResIdByState(@State int state) {
493527
switch (state) {
494528
case State.EMPTY:
495-
return mCommonConfiguration.getCommonEmptyLayout();
529+
return mCommonConfiguration == null ? -1 : mCommonConfiguration.getCommonEmptyLayout();
496530
case State.LOADING:
497-
return mCommonConfiguration.getCommonLoadingLayout();
531+
return mCommonConfiguration == null ? -1 : mCommonConfiguration.getCommonLoadingLayout();
498532
case State.ERROR:
499-
return mCommonConfiguration.getCommonErrorLayout();
533+
return mCommonConfiguration == null ? -1 : mCommonConfiguration.getCommonErrorLayout();
500534
case State.NETWORK_ERROR:
501-
return mCommonConfiguration.getCommonNetworkErrorLayout();
535+
return mCommonConfiguration == null ? -1 : mCommonConfiguration.getCommonNetworkErrorLayout();
502536
case State.CONTENT:
503537
return -1;
504538
}
505539
return 0;
506540
}
541+
542+
private boolean isCommonAnimEnable() {
543+
return mCommonConfiguration != null && mCommonConfiguration.isAnimEnable();
544+
}
545+
546+
private int getCommonAnimDuration() {
547+
return mCommonConfiguration == null ? DEFAULT_ANIM_DURATION : mCommonConfiguration.getAnimDuration();
548+
}
507549
}

sample/src/main/res/layout/activity_main.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
xmlns:state="http://schemas.android.com/apk/res-auto"
2121
android:layout_width="match_parent"
2222
android:layout_height="match_parent"
23-
state:layout_network_error="@layout/layout_custom_network_error">
23+
state:layout_network_error="@layout/layout_custom_network_error"
24+
state:animEnable="true"
25+
state:animDuration="250">
2426

2527
<Button
2628
android:layout_width="wrap_content"

sample/src/main/res/layout/fragment_second.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
android:layout_width="match_parent"
2121
android:layout_height="match_parent"
2222
state:layout_network_error="@layout/layout_custom_network_error"
23-
state:animEnable="true"
24-
state:animDuration="500">
23+
state:layout_loading="@layout/layout_loading">
2524

2625
<TextView
2726
android:layout_width="wrap_content"

0 commit comments

Comments
 (0)