From 94e117da100b3bc8e75d4e1055890f979a431011 Mon Sep 17 00:00:00 2001 From: yanyiqun <287979495@qq.com> Date: Tue, 21 Nov 2017 16:23:39 +0800 Subject: [PATCH] change commit --- .idea/modules.xml | 2 +- app/build.gradle | 2 +- .../java/com/refreshDemo/LottieActivity.java | 3 +- .../java/com/refreshDemo/MyLottileView.java | 2 +- .../com/refreshDemo/RecyclerViewActivity.java | 2 +- refreshlayout/build.gradle | 10 +- .../com/GoRefresh/DefaultHeaderLayout.java | 9 +- .../com/GoRefesh_core/DefaultFooterView.java | 91 -- .../GoRefesh_core/DefaultHeaderLayout.java | 101 -- .../com/GoRefesh_core/GoRefreshLayout.java | 1130 ----------------- .../java/com/GoRefesh_core/IFooterView.java | 20 - .../java/com/GoRefesh_core/IHeaderView.java | 40 - .../com/GoRefesh_core/LoadmoreListener.java | 9 - .../com/GoRefesh_core/RefreshListener.java | 9 - .../com/GoRefesh_core/RingProgressBar.java | 173 --- .../java/com/GoRefesh_core/ScrollingUtil.java | 309 ----- .../src/main/res/drawable-xhdpi/arrow.png | Bin 1223 -> 0 bytes .../src/main/res/layout/footer_error.xml | 15 - .../src/main/res/layout/footer_finish.xml | 12 - .../src/main/res/layout/footer_loading.xml | 22 - .../src/main/res/layout/headerview.xml | 35 - .../src/main/res/values/attr.xml | 26 - .../src/main/res/values/strings.xml | 4 - .../.gitignore | 0 .../build.gradle | 10 +- .../proguard-rules.pro | 0 .../ExampleInstrumentedTest.java | 0 .../src/main/AndroidManifest.xml | 0 .../java/com/GoRefesh_core}/LottieView.java | 5 +- .../src/main/res/values/strings.xml | 3 + .../com/GoRefesh_core/ExampleUnitTest.java | 0 settings.gradle | 2 +- 32 files changed, 24 insertions(+), 2022 deletions(-) delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/DefaultFooterView.java delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/DefaultHeaderLayout.java delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/GoRefreshLayout.java delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/IFooterView.java delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/IHeaderView.java delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/LoadmoreListener.java delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/RefreshListener.java delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/RingProgressBar.java delete mode 100644 refreshlayout_core/src/main/java/com/GoRefesh_core/ScrollingUtil.java delete mode 100644 refreshlayout_core/src/main/res/drawable-xhdpi/arrow.png delete mode 100644 refreshlayout_core/src/main/res/layout/footer_error.xml delete mode 100644 refreshlayout_core/src/main/res/layout/footer_finish.xml delete mode 100644 refreshlayout_core/src/main/res/layout/footer_loading.xml delete mode 100644 refreshlayout_core/src/main/res/layout/headerview.xml delete mode 100644 refreshlayout_core/src/main/res/values/attr.xml delete mode 100644 refreshlayout_core/src/main/res/values/strings.xml rename {refreshlayout_core => refreshlayout_lottie}/.gitignore (100%) rename {refreshlayout_core => refreshlayout_lottie}/build.gradle (79%) rename {refreshlayout_core => refreshlayout_lottie}/proguard-rules.pro (100%) rename {refreshlayout_core => refreshlayout_lottie}/src/androidTest/java/com/GoRefesh_core/ExampleInstrumentedTest.java (100%) rename {refreshlayout_core => refreshlayout_lottie}/src/main/AndroidManifest.xml (100%) rename {refreshlayout/src/main/java/com/GoRefresh => refreshlayout_lottie/src/main/java/com/GoRefesh_core}/LottieView.java (95%) create mode 100644 refreshlayout_lottie/src/main/res/values/strings.xml rename {refreshlayout_core => refreshlayout_lottie}/src/test/java/com/GoRefesh_core/ExampleUnitTest.java (100%) diff --git a/.idea/modules.xml b/.idea/modules.xml index a619fe2..8abf0a7 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -5,7 +5,7 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d2d33f8..ee92457 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,7 +32,7 @@ dependencies { compile 'com.android.support:cardview-v7:26.1.0' compile 'de.hdodenhof:circleimageview:2.2.0' - compile project(':refreshlayout') + compile project(':refreshlayout_lottie') } diff --git a/app/src/main/java/com/refreshDemo/LottieActivity.java b/app/src/main/java/com/refreshDemo/LottieActivity.java index 5dde3e0..8d42f35 100644 --- a/app/src/main/java/com/refreshDemo/LottieActivity.java +++ b/app/src/main/java/com/refreshDemo/LottieActivity.java @@ -17,10 +17,9 @@ import android.widget.LinearLayout; import android.widget.TextView; +import com.GoRefesh_core.LottieView; import com.GoRefresh.GoRefreshLayout; import com.GoRefresh.LoadmoreListener; -import com.GoRefresh.LottieView; - import com.GoRefresh.RefreshListener; import com.airbnb.lottie.LottieAnimationView; import com.bumptech.glide.Glide; diff --git a/app/src/main/java/com/refreshDemo/MyLottileView.java b/app/src/main/java/com/refreshDemo/MyLottileView.java index 98c4d60..cd055d4 100644 --- a/app/src/main/java/com/refreshDemo/MyLottileView.java +++ b/app/src/main/java/com/refreshDemo/MyLottileView.java @@ -3,7 +3,7 @@ import android.content.Context; import android.widget.TextView; -import com.GoRefresh.LottieView; +import com.GoRefesh_core.LottieView; /** * Created by Administrator on 2017/10/23 0023. diff --git a/app/src/main/java/com/refreshDemo/RecyclerViewActivity.java b/app/src/main/java/com/refreshDemo/RecyclerViewActivity.java index 44fb1d7..aa6b6e0 100644 --- a/app/src/main/java/com/refreshDemo/RecyclerViewActivity.java +++ b/app/src/main/java/com/refreshDemo/RecyclerViewActivity.java @@ -11,9 +11,9 @@ import android.widget.ImageView; import android.widget.TextView; +import com.GoRefesh_core.LottieView; import com.GoRefresh.GoRefreshLayout; import com.GoRefresh.LoadmoreListener; -import com.GoRefresh.LottieView; import com.GoRefresh.RefreshListener; import com.bumptech.glide.Glide; diff --git a/refreshlayout/build.gradle b/refreshlayout/build.gradle index de0b086..5db857a 100644 --- a/refreshlayout/build.gradle +++ b/refreshlayout/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'com.github.dcendents.android-maven' group='com.github.yanyiqun001' android { - compileSdkVersion 26 - buildToolsVersion "26.0.2" + compileSdkVersion 25 + buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 15 - targetSdkVersion 26 + targetSdkVersion 25 versionCode 1 versionName "1.0" @@ -28,8 +28,6 @@ dependencies { androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:26.1.0' - compile 'com.android.support:recyclerview-v7:26.1.0' + compile 'com.android.support:recyclerview-v7:25.3.1' testCompile 'junit:junit:4.12' - compile 'com.airbnb.android:lottie:2.2.5' } diff --git a/refreshlayout/src/main/java/com/GoRefresh/DefaultHeaderLayout.java b/refreshlayout/src/main/java/com/GoRefresh/DefaultHeaderLayout.java index 0746309..3acedb8 100644 --- a/refreshlayout/src/main/java/com/GoRefresh/DefaultHeaderLayout.java +++ b/refreshlayout/src/main/java/com/GoRefresh/DefaultHeaderLayout.java @@ -27,9 +27,9 @@ public DefaultHeaderLayout(@NonNull Context context) { private void initView() { mHeaderView=LayoutInflater.from(context).inflate(R.layout.headerview,null); - icon=mHeaderView.findViewById(R.id.arrow); - text=mHeaderView.findViewById(R.id.text); - progressBar=mHeaderView.findViewById(R.id.progressbar); + icon= (ImageView) mHeaderView.findViewById(R.id.arrow); + text= (TextView) mHeaderView.findViewById(R.id.text); + progressBar= (RingProgressBar) mHeaderView.findViewById(R.id.progressbar); icon.setVisibility(View.VISIBLE); icon.setImageResource(R.drawable.arrow); } @@ -97,7 +97,4 @@ private void reset() { progressBar.stopAnimation(); } - - - } diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/DefaultFooterView.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/DefaultFooterView.java deleted file mode 100644 index 4c0daff..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/DefaultFooterView.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.GoRefesh_core; - -import android.content.Context; -import android.graphics.Paint; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - - -/** - * Created by Administrator on 2017/9/30 0030. - */ - -public class DefaultFooterView implements IFooterView { - private Context context; - private View loadingView; - private View finishView; - private View errorView; - private View retryView; - - public DefaultFooterView(Context context) { - this.context = context; - initView(); - } - - private void initView() { - loadingView = LayoutInflater.from(context).inflate(R.layout.footer_loading, null); - finishView = LayoutInflater.from(context).inflate(R.layout.footer_finish, null); - errorView = LayoutInflater.from(context).inflate(R.layout.footer_error, null); - retryView = errorView.findViewById(R.id.tips); - ((TextView) retryView).getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); - } - - @Override - public View getLoadingView() { - return loadingView; - } - - @Override - public View getFinishView() { - return finishView; - } - - @Override - public View getFailureView() { - return errorView; - } - - @Override - public View getRetryView() { - - return retryView; - } - - public void setLoadingView(int layoutID) { - this.loadingView = LayoutInflater.from(context).inflate(layoutID, null); - } - - public void setLoadingView(View loadingView) { - this.loadingView = loadingView; - } - - public void setFinishView(int layoutID) { - this.finishView = LayoutInflater.from(context).inflate(layoutID, null); - } - - public void setFinishView(View finishView) { - this.finishView = finishView; - } - - public void setErrorView(int layoutID) { - View errorView = LayoutInflater.from(context).inflate(layoutID, null); - this.errorView = errorView; - } - - public void setErrorView(View errorView) { - this.errorView = errorView; - } - - public void setErrorView(int layoutID, int retryId) { - View errorView = LayoutInflater.from(context).inflate(layoutID, null); - View retryView = errorView.findViewById(retryId); - this.errorView = errorView; - this.retryView = retryView; - } - - public void setErrorView(View errorView, View retryView) { - this.errorView = errorView; - this.retryView = retryView; - } -} diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/DefaultHeaderLayout.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/DefaultHeaderLayout.java deleted file mode 100644 index 9109c15..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/DefaultHeaderLayout.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.GoRefesh_core; - -import android.content.Context; -import android.support.annotation.NonNull; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - - -/** - * Created by Administratoron 2017/9/25 0025. - */ - -public class DefaultHeaderLayout implements IHeaderView { - private View mHeaderView; - private ImageView icon; - private TextView text; - private Context context; - private RingProgressBar progressBar; - public DefaultHeaderLayout(@NonNull Context context) { - this.context=context; - initView(); - } - - private void initView() { - mHeaderView=LayoutInflater.from(context).inflate(R.layout.headerview,null); - icon=mHeaderView.findViewById(R.id.arrow); - text=mHeaderView.findViewById(R.id.text); - progressBar=mHeaderView.findViewById(R.id.progressbar); - icon.setVisibility(View.VISIBLE); - icon.setImageResource(R.drawable.arrow); - } - - @Override - public View getView() { - return mHeaderView; - } - - @Override - public void onPull(float a) { - - } - - @Override - public void onReady() { - } - - @Override - public void onChange(boolean isPull) { - if(isPull){ - text.setText("释放刷新"); - arrowUp(); - }else{ - text.setText("下拉刷新"); - arrowDown(); - } - } - - @Override - public void onRefresh() { - text.setText("正在加载"); - iconChange(); - } - - @Override - public void onRefreshFinish() { - } - - @Override - public void onBackFinish() { - reset(); - } - - - - private void arrowDown(){ - icon.animate().rotation(0).setDuration(300).start(); - } - private void arrowUp(){ - icon.animate().rotation(-180).setDuration(300).start(); - } - - private void iconChange() { - icon.setVisibility(View.GONE); - progressBar.setVisibility(View.VISIBLE); - progressBar.startAnimation(); - } - - private void reset() { - text.setText("下拉刷新"); - icon.setVisibility(View.VISIBLE); - icon.setRotation(0); - progressBar.setVisibility(View.GONE); - progressBar.stopAnimation(); - } - - - - -} diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/GoRefreshLayout.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/GoRefreshLayout.java deleted file mode 100644 index 838a5bf..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/GoRefreshLayout.java +++ /dev/null @@ -1,1130 +0,0 @@ -package com.GoRefesh_core; - -import android.animation.Animator; -import android.animation.ValueAnimator; -import android.content.Context; -import android.content.res.TypedArray; -import android.support.annotation.AttrRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; -import android.util.Log; -import android.view.MotionEvent; -import android.view.VelocityTracker; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.LinearInterpolator; -import android.widget.AbsListView; -import android.widget.ListView; - -import static android.view.MotionEvent.ACTION_MOVE; -import static android.view.MotionEvent.ACTION_UP; - -/** - * Created by Administrator on 2017/9/23 0023. - */ - -public class GoRefreshLayout extends ViewGroup { - //最大下拉高度 - private float mMaxHeight = 500; - //header高度 - private float mHeaderHeight = 250; - //footer高度 - private float mFooterHeight = 100; - //刷新高度 - private float mRefreshHeight = 300; - //手指拖动距离与下拉距离之比 - private float mDamping = 2f; - //返回顶部时长 - private int duration_top = 300; - //返回到刷新高度(头部高度)时长 - private int duration_backtoRefreshHeight = 200; - //底部弹出时长 - private int duration_footerVisiable = 200; - //底部隐藏时长 - private int duration_footerHidden = 200; - //自动刷新弹出时间 - private int duration_autotoRefreshHeight = 1000; - //当前状态 - private int mStatus = 0; - //正常状态 - private int STATUS_NORMAL = 0; - //下拉状态 - private int STATUS_PULL = 1; - //就绪状态 - private int STATUS_READY = 2; - //刷新状态 - private int STATUS_REFRESH = 3; - //返回状态 - private int STATUS_BACK = 4; - //是否固定内容 - private boolean isFixedContent = false; - //头部接口对象 - private IHeaderView mHeader; - //底部接口对象 - private IFooterView mFooter; - //头部view - private View mHeaderView; - //底部view - private View mFooterView; - //内容view - private View mContentView; - - private RefreshListener refresrhListener; - - private LoadmoreListener loadmoreListener; - - private AbsListView.OnScrollListener mScrollListener; - //是否在加载状态 - private boolean isLoadingMore; - //是否显示hasHeader - private boolean hasHeader = true; - //是否显示footer - private boolean hasFooter; - - //FOOTER是否在显示状态 - private boolean isFooterVisibility = false; - //Y方向偏移量 - private float offsetY; - - private boolean hasY = false; - private int mOrignY; - private int mLastY; - private float mCurrentLastY; - private VelocityTracker velocityTracker; - private float velocity; - //内容固定状态下当前头部偏移 - private float fixOffset; - - private ValueAnimator valueAnimatorTotop; - private ValueAnimator valueAnimatorToRefresh; - - - private int mFooterStatus = 1; - private int LOADING = 1; //加载状态 - private int FINISH = 2; //完成状态 - private int ERROR = 3; //错误状态 - - private boolean isLoadingMore2; - - private Context context; - - public GoRefreshLayout(@NonNull Context context) { - super(context); - init(context, null); - } - - public GoRefreshLayout(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(context, attrs); - } - - public GoRefreshLayout(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context, attrs); - } - - private void init(Context context, AttributeSet attrs) { - this.context = context; - TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.GoRefreshLayout); - mMaxHeight = typedArray.getDimension(R.styleable.GoRefreshLayout_maxHeight, mMaxHeight); - mRefreshHeight = typedArray.getDimension(R.styleable.GoRefreshLayout_refreshHeight, mRefreshHeight); - mHeaderHeight = typedArray.getDimension(R.styleable.GoRefreshLayout_headerHeight, mHeaderHeight); - mFooterHeight = typedArray.getDimension(R.styleable.GoRefreshLayout_footerHeight, mFooterHeight); - isFixedContent = typedArray.getBoolean(R.styleable.GoRefreshLayout_isFixed, isFixedContent); - mDamping = typedArray.getFloat(R.styleable.GoRefreshLayout_damping, mDamping); - duration_backtoRefreshHeight = typedArray.getInt(R.styleable.GoRefreshLayout_duration_BacktorefreshHeight, duration_backtoRefreshHeight); - duration_top = typedArray.getInt(R.styleable.GoRefreshLayout_duration_BacktoTop, duration_top); - duration_footerVisiable = typedArray.getInt(R.styleable.GoRefreshLayout_duration_FooterVisibility, duration_footerVisiable); - duration_footerHidden = typedArray.getInt(R.styleable.GoRefreshLayout_duration_FooterHidden, duration_footerHidden); - duration_autotoRefreshHeight=typedArray.getInt(R.styleable.GoRefreshLayout_duration_autotoRefreshHeight, duration_autotoRefreshHeight); - typedArray.recycle(); - mHeader = new DefaultHeaderLayout(context); - mFooter = new DefaultFooterView(context); - velocityTracker = VelocityTracker.obtain(); - } - - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - mContentView = getChildAt(0); - - //监听view滑动到底部开启自动加载 - if (mContentView instanceof RecyclerView) { - ((RecyclerView) mContentView).addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - } - - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - if (hasFooter) - showFooter(ScrollingUtil.isViewToBottom(mContentView)); - } - }); - } else if (mContentView instanceof AbsListView) { - ((AbsListView) mContentView).setOnScrollListener(new AbsListView.OnScrollListener() { - @Override - public void onScrollStateChanged(AbsListView absListView, int i) { - if (mScrollListener != null) { - mScrollListener.onScrollStateChanged(absListView, i); - } - } - - @Override - public void onScroll(AbsListView absListView, int i, int i1, int i2) { - if (mScrollListener != null) { - mScrollListener.onScroll(absListView, i, i1, i2); - } - if (hasFooter) - showFooterwithListView(absListView, ScrollingUtil.isViewToBottom(mContentView)); - } - }); - } - - addHeaderView(mHeader); - } - - - private void addHeaderView(IHeaderView view) { - mHeaderView = view.getView(); - LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, (int) mHeaderHeight); - mHeaderView.setLayoutParams(params); - addView(mHeaderView); - } - - - private void addFooterView(IFooterView view, int flag) { - if (flag == LOADING) { - mFooterView = view.getLoadingView(); - } else if (flag == FINISH) { - mFooterView = view.getFinishView(); - } else if (flag == ERROR) { - mFooterView = view.getFailureView(); - } - if (mContentView instanceof AbsListView) { - AbsListView.LayoutParams params = new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, (int) mFooterHeight); - mFooterView.setLayoutParams(params); - ((ListView) mContentView).addFooterView(mFooterView); - } else { - LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, (int) mFooterHeight); - mFooterView.setLayoutParams(params); - addView(mFooterView); - } - } - - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int widthMode = MeasureSpec.getMode(widthMeasureSpec); - int widthSize = MeasureSpec.getSize(widthMeasureSpec); - int heightMode = MeasureSpec.getMode(heightMeasureSpec); - int heightSize = MeasureSpec.getSize(heightMeasureSpec); - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - measureChild(child, widthMeasureSpec, heightMeasureSpec); - } - int widthResult = widthSize; - int heightResult = heightSize; - if (widthMode == MeasureSpec.AT_MOST) { - widthResult = mContentView.getMeasuredWidth(); - } - if (heightMode == MeasureSpec.AT_MOST) { - heightResult = mContentView.getMeasuredHeight(); - } - setMeasuredDimension(widthResult, heightResult); - } - - - @Override - protected void onLayout(boolean b, int i0, int i1, int i2, int i3) { - for (int i = 0; i < getChildCount(); i++) { - View child = getChildAt(i); - if (child == mHeaderView) { - mHeaderHeight = child.getMeasuredHeight(); - if (isFixedContent) { - child.layout(0, (int) (-child.getMeasuredHeight() + fixOffset), child.getMeasuredWidth(), (int) fixOffset); - } else { - child.layout(0, -child.getMeasuredHeight(), child.getMeasuredWidth(), 0); - } - } else if (child == mFooterView) { - child.layout(0, getHeight(), child.getMeasuredWidth(), getHeight() + child.getMeasuredHeight()); - } else { - child.layout(0, 0, child.getMeasuredWidth(), child.getMeasuredHeight()); - } - } - } - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - velocityTracker.addMovement(ev); - velocityTracker.computeCurrentVelocity(100); - - switch (ev.getActionMasked()) { - case MotionEvent.ACTION_DOWN: - break; - case MotionEvent.ACTION_MOVE: - velocity = velocityTracker.getYVelocity(); - if (isLoadingMore2) { - if (velocity < 50) - return true; - } - if (isFooterVisibility) { - if (velocity > 10) { - finishLoadmoremanual(); - return true; - } else { - return true; - } - } - break; - - } - - return super.dispatchTouchEvent(ev); - } - - - @Override - public boolean onInterceptTouchEvent(MotionEvent event) { - - int y = (int) event.getY(); - switch (event.getActionMasked()) { - case MotionEvent.ACTION_DOWN: - mLastY = 0; - mOrignY = y; - //有偏移时再次按下 ,计算得到mCurrentLastY - if ((getScrollY() < 0) && mStatus != STATUS_BACK) { - hasY = true; - cancelscrollToTop(); - mCurrentLastY = calculateDistance(-getScrollY()); - //刷新时点击事件不拦截 - if (mStatus == STATUS_REFRESH) { - return false; - } - return true; - } else { - hasY = false; - } - break; - case ACTION_MOVE: - int dy = y - mLastY; - Log.d("onInterceptTouchEvent", "onInterceptTouchEvent==" + 0); - // 内容固定时刷新状态不拦截滑动 - // 下拉拦截滑动事件 - // 刷新时Y方向有偏移时上拉拦截滑动事件 - // Y方向无偏移时上拉不拦截滑动事件 - // Math.abs(velocity)>1是由于 在手机上点击操作ACTION_DOWN会伴随无意义的ACTION_MOVE的出现 但不会有滑动速度,不拦截 - if (isFixedContent && mStatus == STATUS_REFRESH) { - return false; - } else if (!canScrollUp() && dy > 0 && mStatus != STATUS_BACK && Math.abs(velocity) > 1) { - return true; - } else if (dy < 0 && getScrollY() >= 0) { - return false; - } else if (mStatus == STATUS_REFRESH && dy < 0) { - return true; - } - break; - } - mLastY = y; - return super.onInterceptTouchEvent(event); - } - - - @Override - public boolean onTouchEvent(MotionEvent event) { - int y = (int) event.getY(); - if (Math.abs(getScrollY()) > mMaxHeight || !hasHeader) { - return true; - } - switch (event.getActionMasked()) { - - case MotionEvent.ACTION_DOWN: - //正在刷新或者加载中时屏蔽对header和footer的点击事件 - if (mStatus == STATUS_REFRESH || isFooterVisibility) { - return false; - } - mOrignY = y; - break; - case ACTION_MOVE: -// int dy = y - mLastY; - //刷新时上拉 -// if(dy<0&&mStatus == STATUS_REFRESH&&getScrollY()<=0){ -// // TODO: 2017/10/2 0002 -// scrollBy(0, -dy); -// } - float distanceY; - if (hasY) { - distanceY = y - mOrignY + mCurrentLastY; - } else { - //ACTION_DOWN失去 - if (mOrignY == -1) { - mOrignY = y; - } - distanceY = y - mOrignY; - } - offsetY = calculateOffsetY(distanceY); - if (offsetY < 0) { - offsetY = 0; - } - if (isFixedContent) { - mHeaderView.layout(0, (int) (offsetY - mHeaderView.getMeasuredHeight()), mHeaderView.getMeasuredWidth(), (int) offsetY); - fixOffset = offsetY; - } else { - scrollTo(0, -(int) offsetY); - } - if (mStatus != STATUS_REFRESH && mStatus != STATUS_BACK) { - if (offsetY < mRefreshHeight) { - if (mStatus == STATUS_READY) { - //上拉经过临界点 - mHeader.onChange(false); - } - mStatus = STATUS_PULL; - mHeader.onPull(offsetY / mRefreshHeight); - } else { - if (mStatus == STATUS_PULL) { - //下拉经过临界点 - mHeader.onChange(true); - } - mStatus = STATUS_READY; - mHeader.onReady(); - } - } - - break; - case ACTION_UP: - //松开时如果在刷新状态,下拉时返回偏移高度 - if (mStatus == STATUS_REFRESH) { - if (offsetY > mHeaderHeight) { - startRefresh((int) offsetY, duration_backtoRefreshHeight); - } - } - //松开时如果在就绪状态,开启刷新 - else if (mStatus == STATUS_READY) { - mStatus = STATUS_REFRESH; - startRefresh((int) offsetY, duration_backtoRefreshHeight); - mHeader.onRefresh(); - if (refresrhListener != null) { - refresrhListener.onRefresh(); - } - // postDelayed(runnable, 4000); - } else if (mStatus == STATUS_BACK) { - break; - } - //否则回到顶部 - else { - if (offsetY >= 0) { - cancelscrollToTop(); - if (isFixedContent) { - scrollToTop((int) offsetY); - } else { - scrollToTop(-getScrollY()); - } - } else { - scrollToTop(0); - } - } - break; - default: - break; - } - // mLastY = y; - - return true; - } - - - /** - * 判断是否内容在顶部,可以下拉 - * - * @return - */ - private boolean canScrollUp() { - return getChildAt(0).canScrollVertically(-1); - } - - /** - * 计算Y方向偏移 - * 当前百分比计算方式 decelerateInterpolator 公式:(1 - (1- x) * (1 - x)) - * - * @param distanceY - * @return - */ - public float calculateOffsetY(float distanceY) { - float percent = distanceY / mMaxHeight / mDamping > 1 ? 1 : distanceY / mMaxHeight / mDamping; - return (1 - (1 - percent) * (1 - percent)) * mMaxHeight; - } - - /** - * 计算Y方向滑动距离 - * 通过公式:(1 - (1- x) * (1 - x)) *mMaxHeight=offsetY 推算x的值 - * 通过x=distanceY / mMaxHeight/mDamping 推算distanceY - * - * @param offsetY - * @return - */ - public float calculateDistance(int offsetY) { - return (float) (1 - Math.sqrt(1 - offsetY / mMaxHeight)) * mDamping * mMaxHeight; - } - - /** - * 从下拉位置回弹至刷新位置 - * - * @param offsetY - */ - private void startRefresh(final int offsetY, int duration) { - if (valueAnimatorToRefresh != null && valueAnimatorToRefresh.isRunning()) { - valueAnimatorToRefresh.cancel(); - } - valueAnimatorToRefresh = ValueAnimator.ofInt(offsetY, (int) mHeaderHeight); - valueAnimatorToRefresh.setDuration(duration); - valueAnimatorToRefresh.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - int value = (int) valueAnimator.getAnimatedValue(); - Log.d("tag",value+""); - if (isFixedContent) { - mHeaderView.layout(0, value - mHeaderView.getMeasuredHeight(), mHeaderView.getMeasuredWidth(), value); - fixOffset = value; - } else { - scrollTo(0, -value); - } - } - }); - valueAnimatorToRefresh.start(); - } - - /** - * 刷新完成返回顶部 - * - * @param offset - */ - private void finishRefresh(int offset) { - mStatus = STATUS_BACK; - mHeader.onRefreshFinish(); - scrollToTop(offset); - } - - /** - * 任意位置返回至顶部 - * - * @param offset - */ - private void scrollToTop(int offset) { - valueAnimatorTotop = ValueAnimator.ofInt(offset, 0); - valueAnimatorTotop.setDuration(duration_top); - valueAnimatorTotop.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - int value = (int) valueAnimator.getAnimatedValue(); -// if (value == 0) { -// finishToTop(); -// } - if (isFixedContent) { - mHeaderView.layout(0, value - mHeaderView.getMeasuredHeight(), mHeaderView.getMeasuredWidth(), value); - fixOffset = value; - } else { - scrollTo(0, -value); - } - } - }); - valueAnimatorTotop.addListener(new Animator.AnimatorListener() { - @Override - public void onAnimationStart(Animator animator) { - } - - @Override - public void onAnimationEnd(Animator animator) { - finishToTop(); - } - - @Override - public void onAnimationCancel(Animator animator) { - } - - @Override - public void onAnimationRepeat(Animator animator) { - } - - }); - valueAnimatorTotop.start(); - } - - /** - * 取消返回顶部 - */ - private void cancelscrollToTop() { - if (valueAnimatorTotop != null && valueAnimatorTotop.isRunning()) { - valueAnimatorTotop.cancel(); - } - } - - /** - * 返回顶部后调用 - */ - private void finishToTop() { - mStatus = STATUS_NORMAL; - mHeader.onBackFinish(); - reset(); - } - - //-------------------------------------------------------------------------------- - //------------------------------footer相关-------------------------------------- - //-------------------------------------------------------------------------------- - - private void showFooter(boolean isBottom) { - if (isBottom && !isFooterVisibility && velocity <= 0) { - showFooter(); - if (!isLoadingMore) { - isLoadingMore = true; - if (loadmoreListener != null) { - loadmoreListener.onLoadmore(); - } - } - isFooterVisibility = true; - - } - } - - private void showFooterwithListView(AbsListView absListView, boolean viewToBottom) { - if (viewToBottom) { - if (loadmoreListener != null) { - if (!isLoadingMore) { - loadmoreListener.onLoadmore(); - isLoadingMore = true; - } - } - } - - } - - /** - * 显示footerview - */ - private void showFooter() { - ValueAnimator valueAnimator = ValueAnimator.ofInt(0, (int) mFooterHeight); - valueAnimator.setDuration(duration_footerVisiable); - valueAnimator.setInterpolator(new LinearInterpolator()); - valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - int value = (int) valueAnimator.getAnimatedValue(); - scrollTo(0, value); - } - }); - valueAnimator.start(); - } - - /** - * 隐藏footerview - */ - private void hideFooter() { - if (duration_footerHidden <= 0) { - if (mContentView instanceof RecyclerView) { - mContentView.post(new Runnable() { - @Override - public void run() { - scrollTo(0, 0); - mContentView.scrollBy(0, (int) mFooterHeight); - } - }); - } else if (mContentView instanceof AbsListView) { - mContentView.post(new Runnable() { - @Override - public void run() { - scrollTo(0, 0); - ((AbsListView) mContentView).smoothScrollBy((int) mFooterHeight, 0); - } - }); - } - } else { - ValueAnimator valueAnimator = ValueAnimator.ofInt((int) mFooterHeight, 0); - valueAnimator.setDuration(duration_footerHidden); - valueAnimator.setInterpolator(new LinearInterpolator()); - valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - final int value = (int) valueAnimator.getAnimatedValue(); - final int dy = currentValue - value; - if (value == 0) { - isLoadingMore2 = false; - } - if (dy > 0) { - if (mContentView instanceof RecyclerView) { - mContentView.post(new Runnable() { - @Override - public void run() { - scrollTo(0, value); - mContentView.scrollBy(0, dy); - } - }); - } else if (mContentView instanceof AbsListView) { - mContentView.post(new Runnable() { - @Override - public void run() { - scrollTo(0, value); - ((AbsListView) mContentView).smoothScrollBy(dy, 0); - } - }); - } - } - - updateCurrentFooterHeight(valueAnimator); - } - }); - valueAnimator.start(); - } - } - - private int currentValue; - - private void updateCurrentFooterHeight(ValueAnimator valueAnimator) { - currentValue = (int) valueAnimator.getAnimatedValue(); - } - - private void reset() { - hasY = false; - mOrignY = -1; - mCurrentLastY = 0; - } - - - private void removeHeaderView() { - if (mHeaderView != null) { - removeView(mHeaderView); - } - } - - private void removeFooterView() { - if (mFooterView != null) { - if (mContentView instanceof AbsListView) { - ((ListView) mContentView).removeFooterView(mFooterView); - } else { - removeView(mFooterView); - } - } - } - - /** - * 切换footerview - * - * @param flag - */ - private void switchFooterView(int flag) { - if (valid(flag)) { - mFooterStatus = flag; - removeFooterView(); - addFooterView(mFooter, flag); - } - } - - private boolean valid(int flag) { - if (mFooter != null) { - if (flag == LOADING) { - if (mFooter.getLoadingView() != null) { - return true; - } - } else if (flag == FINISH) { - if (mFooter.getFinishView() != null) { - return true; - } - - } else if (flag == ERROR) { - if (mFooter.getFailureView() != null) { - return true; - } - } - } - return false; - } - - //-------------------------------------------------------------------------------- - //------------------------------对外提供api-------------------------------------- - //-------------------------------------------------------------------------------- - - /** - * 设置header - */ - public void setHeaderView(IHeaderView view) { - removeHeaderView(); - mHeader = view; - addHeaderView(view); - } - - /** - * 设置footer - */ - public void setFooterView(IFooterView view) { - if (hasFooter) { - mFooter = view; - removeFooterView(); - addFooterView(view, LOADING); - } - } - - - /** - * 设置是否显示footer - * - * @param hasFooter - */ - public void setHasFooter(boolean hasFooter) { - this.hasFooter = hasFooter; - if (hasFooter) { - if (mFooterView == null) { - setFooterView(mFooter); - } - } else { - removeFooterView(); - } - } - - /** - * 设置是否显示header - */ - public void setHasHeader(boolean hasHeader) { - this.hasHeader = hasHeader; - if (hasHeader) { - setHeaderView(mHeader); - } else { - removeHeaderView(); - } - } - - public boolean isHasFooter() { - return hasFooter; - } - - /** - * 设置下拉刷新事件监听 - * - * @param listener - */ - public void setOnRefreshListener(RefreshListener listener) { - this.refresrhListener = listener; - } - - /** - * 设置上拉加载事件监听 - * - * @param listener - */ - public void setOnLoadmoreListener(LoadmoreListener listener) { - this.loadmoreListener = listener; - } - - - /** - * 设置listview的滚动监听 - */ - public void setScrollListener(AbsListView.OnScrollListener mScrollListener) { - this.mScrollListener = mScrollListener; - } - - /** - * 自动下拉刷新 - */ - public void startRefresh() { - post(new Runnable() { - @Override - public void run() { - startRefresh((int) offsetY, duration_autotoRefreshHeight); - mHeader.onRefresh(); - mStatus = STATUS_REFRESH; - if (refresrhListener != null) - refresrhListener.onRefresh(); - } - }); - - } - - /** - * 结束刷新,刷新完成调用 - */ - public void finishRefresh() { - if (isFixedContent) { - if (mStatus == STATUS_REFRESH) - finishRefresh((int) mHeaderHeight); - - } else { - finishRefresh(-getScrollY()); - } - } - - /** - * 隐藏footerview,手动下拉时调用 - */ - private void finishLoadmoremanual() { - if (isFooterVisibility) { - isLoadingMore2 = true; - isFooterVisibility = false; - hideFooter(); - } - } - - /** - * 隐藏footerview,加载数据完毕时调用 - */ - public void finishLoadmore() { - isLoadingMore = false; - if (isFooterVisibility) { - isFooterVisibility = false; - hideFooter(); - } - } - - /** - * 加载数据完毕没有更多数据时调用 - */ - public void finishLoadmoreWithNoData() { - switchFooterView(FINISH); - } - - /** - * 加载数据出错时调用 - */ - public void finishLoadmoreWithError() { - switchFooterView(ERROR); - if (mFooter.getRetryView() != null) { - mFooter.getRetryView().setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (loadmoreListener != null) { - if (mContentView instanceof AbsListView) { - switchFooterView(LOADING); - ((ListView) mContentView).setSelection(((ListView) mContentView).getAdapter().getCount() - 1); - loadmoreListener.onLoadmore(); - return; - } - switchFooterView(LOADING); - loadmoreListener.onLoadmore(); - } - } - }); - } - } - - /** - * 设置是否内容不随头部下拉 - * - * @param fixedContent - */ - public void setFixedContent(boolean fixedContent) { - isFixedContent = fixedContent; - } - - public boolean isFixedContent() { - return isFixedContent; - } - - public float getMaxHeight() { - return mMaxHeight; - } - - /** - * 设置下拉最大高度 - */ - public void setMaxHeight(float mMaxHeight) { - this.mMaxHeight = mMaxHeight; - } - - public float getHeaderHeight() { - return mHeaderHeight; - } - - /** - * 设置header高度 - */ - public void setHeaderHeight(float mHeaderHeight) { - this.mHeaderHeight = mHeaderHeight; - } - - public float getFooterHeight() { - return mFooterHeight; - } - - /** - * 设置footer高度 - */ - public void setFooterHeight(float mFooterHeight) { - this.mFooterHeight = mFooterHeight; - } - - public float getRefreshHeight() { - return mRefreshHeight; - } - - /** - * 设置刷新高度 - */ - public void setRefreshHeight(float mRefreshHeight) { - this.mRefreshHeight = mRefreshHeight; - } - - public float getDamping() { - return mDamping; - } - - /** - * 设置阻尼数值 - */ - public void setDamping(float mDamping) { - this.mDamping = mDamping; - } - - public int getDurationtoTop() { - return duration_top; - } - - /** - * 设置下拉回弹时间 - */ - public void setDurationtoTop(int duration_top) { - this.duration_top = duration_top; - } - - - /** - * 设置下拉回弹至刷新高度时间 - */ - public void setDurationtoRefreshHeight(int duration_refreshHeight) { - this.duration_backtoRefreshHeight = duration_refreshHeight; - } - - public int getDurationtoRefreshHeight() { - return duration_backtoRefreshHeight; - } - - public int getDuration_autotoRefreshHeight() { - return duration_autotoRefreshHeight; - } - - /** - * 设置自动弹出时间 - */ - public void setDuration_autotoRefreshHeight(int duration_autotoRefreshHeight) { - this.duration_autotoRefreshHeight = duration_autotoRefreshHeight; - } - - /** - * 设置footerview弹出时长 - */ - public void setDurationFooterVisiable(int duration_footer) { - this.duration_footerVisiable = duration_footer; - } - - public int getDurationFooterVisiable() { - return duration_footerVisiable; - } - - /** - * 设置footerview返回底部时间 - */ - public int getDurationFooterHidden() { - return duration_footerHidden; - } - - public void setDurationFooterHidden(int duration_footerHidden) { - this.duration_footerHidden = duration_footerHidden; - } - - /** - * 获得fooerview状态 - * - * @return - */ - public int getFooterStatus() { - return mFooterStatus; - } - - /** - * 获得默认footerview - * - * @return - */ - public DefaultFooterView getDefaultFooterView() { - if (mFooter instanceof DefaultFooterView) { - return (DefaultFooterView) mFooter; - } else { - return new DefaultFooterView(context); - } - - } - - /** - * 设置加载状态的footerview - * - * @param layoutID - */ - public void setLoadingView(int layoutID) { - if (mFooter instanceof DefaultFooterView) { - ((DefaultFooterView) mFooter).setLoadingView(layoutID); - setFooterView(mFooter); - } - } - - public void setLoadingView(View view) { - if (mFooter instanceof DefaultFooterView) { - ((DefaultFooterView) mFooter).setLoadingView(view); - setFooterView(mFooter); - } - } - - /** - * 设置完成状态的footerview - * - * @param layoutID - */ - public void setFinishWithNodataView(int layoutID) { - if (mFooter instanceof DefaultFooterView) { - ((DefaultFooterView) mFooter).setFinishView(layoutID); - setFooterView(mFooter); - } - } - - public void setFinishWithNodataView(View view) { - if (mFooter instanceof DefaultFooterView) { - ((DefaultFooterView) mFooter).setFinishView(view); - setFooterView(mFooter); - } - } - - /** - * 设置加载失败状态的footerview - */ - public void setErrorView(int layoutID) { - if (mFooter instanceof DefaultFooterView) { - ((DefaultFooterView) mFooter).setErrorView(layoutID); - setFooterView(mFooter); - } - } - - public void setErrorView(View errorView) { - if (mFooter instanceof DefaultFooterView) { - ((DefaultFooterView) mFooter).setErrorView(errorView); - setFooterView(mFooter); - } - } - - /** - * 设置加载失败状态的footerview ,同时添加触发重试的控件 - */ - public void setErrorViewWithRetry(int layoutID, int retryId) { - if (mFooter instanceof DefaultFooterView) { - ((DefaultFooterView) mFooter).setErrorView(layoutID, retryId); - setFooterView(mFooter); - } - } - - public void setErrorViewWithRetry(View errorView, View retryView) { - if (mFooter instanceof DefaultFooterView) { - ((DefaultFooterView) mFooter).setErrorView(errorView, retryView); - setFooterView(mFooter); - } - } -} diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/IFooterView.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/IFooterView.java deleted file mode 100644 index 9a8c22d..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/IFooterView.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.GoRefesh_core; - -import android.view.View; - -/** - * Created by Administrator on 2017/9/30 0030. - */ - -public interface IFooterView { - View getLoadingView(); - - View getFinishView(); - - View getFailureView(); - - View getRetryView(); - - - -} diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/IHeaderView.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/IHeaderView.java deleted file mode 100644 index 36dc2bc..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/IHeaderView.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.GoRefesh_core; - -import android.view.View; - -/** - * Created by Administrator on 2017/9/25 0025. - */ - -public interface IHeaderView { - View getView(); - - /** - * 下拉过程中调用(持续触发) - * @param a 根据下拉距离返回0-1之前的值 - */ - void onPull(float a); - /** - * 下拉通过临界值 处于就绪状态时调用(持续触发) - */ - void onReady(); - - /** - * 经过临界值是调用(非持续触发) - * @param isPull true表示下拉经过临界 false表示上拉经过临界 - */ - void onChange(boolean isPull); - - /** - * 开始刷新时触发(非持续触发) - */ - void onRefresh(); - /** - * 刷新完成时触发(非持续触发) - */ - void onRefreshFinish(); - /** - * 刷新完成回到顶部时触发(非持续触发) - */ - void onBackFinish(); -} diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/LoadmoreListener.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/LoadmoreListener.java deleted file mode 100644 index 9e4ef4b..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/LoadmoreListener.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.GoRefesh_core; - -/** - * Created by Administrator on 2017/10/10 0010. - */ - -public interface LoadmoreListener { - void onLoadmore(); -} diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/RefreshListener.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/RefreshListener.java deleted file mode 100644 index fb57f99..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/RefreshListener.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.GoRefesh_core; - -/** - * Created by Administrator on 2017/10/29 0029. - */ - -public interface RefreshListener { - void onRefresh(); -} diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/RingProgressBar.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/RingProgressBar.java deleted file mode 100644 index 8a6fae4..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/RingProgressBar.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.GoRefesh_core; - -import android.animation.ValueAnimator; -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.support.v4.view.animation.PathInterpolatorCompat; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.View; -import android.view.animation.Interpolator; - -/** - * Created by Administrator on 2016/9/28 0028. - */ -public class RingProgressBar extends View { - - private final static int DEFAULT_BALL_COLOR = 0xFFFF9966; - private final static int DEFAULT_RING_COLOR = 0xFFFF9966; - private final static int DEFAULT_BALL_RADIUS = 4; - private final static int DEFAULT_RING_RADIUS = 20; - private final static int DEFAULT_RING_STOKEWIDTH = 1; - private final static int DEFAULT_DURATION = 1300; - - - private int mBallColor = DEFAULT_BALL_COLOR; - private int mRingColor = DEFAULT_RING_COLOR; - private float mBallRadius = dp2px(DEFAULT_BALL_RADIUS); - private float mRingRadius = dp2px(DEFAULT_RING_RADIUS); - private float mStokeWidth = dp2px(DEFAULT_RING_STOKEWIDTH); - private int mDuration = DEFAULT_DURATION; - - private int mCurrentAngle; - private ValueAnimator mAnimator;// 旋转动画 - private Paint mPaint; - private Paint mPaint2; - private Interpolator pathInterpolatorCompat; - - public RingProgressBar(Context context) { - this(context, null); - } - - public RingProgressBar(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public RingProgressBar(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - - TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.RingProgressBar); - mBallColor = typedArray.getColor(R.styleable.RingProgressBar_progress_ball_color, mBallColor); - mRingColor = typedArray.getColor(R.styleable.RingProgressBar_progress_ring_color, mRingColor); - mBallRadius = typedArray.getDimension(R.styleable.RingProgressBar_progress_ball_radius, mBallRadius); - mRingRadius = typedArray.getDimension(R.styleable.RingProgressBar_progress_ring_radius, mRingRadius); - mStokeWidth = typedArray.getDimension(R.styleable.RingProgressBar_progress_ring_stokewidth, mStokeWidth); - mDuration = typedArray.getInteger(R.styleable.RingProgressBar_progress_duration, mDuration); - typedArray.recycle(); - - mPaint = new Paint(); - mPaint.setAntiAlias(true); - mPaint.setStyle(Paint.Style.FILL_AND_STROKE); - mPaint.setColor(mBallColor); - mPaint2 = new Paint(); - mPaint2.setAntiAlias(true); - mPaint2.setColor(mRingColor); - mPaint2.setStyle(Paint.Style.STROKE); - mPaint2.setStrokeWidth(mStokeWidth); - initAnimatior(); - } - - - private void initAnimatior() { - pathInterpolatorCompat = PathInterpolatorCompat.create(0.7f, 0f, 0.3f, 1f); - mAnimator = ValueAnimator.ofInt(0, 359); - mAnimator.setDuration(mDuration); - mAnimator.setRepeatCount(-1); - mAnimator.setInterpolator(pathInterpolatorCompat); - mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - mCurrentAngle = (int) animation.getAnimatedValue(); - - invalidate(); - } - }); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - - int height = measurehight(heightMeasureSpec); - int width = measurewidth(widthMeasureSpec); - setMeasuredDimension(width, height); - - } - - private int measurewidth(int widthMeasureSpec) { - int size = MeasureSpec.getSize(widthMeasureSpec); - int mode = MeasureSpec.getMode(widthMeasureSpec); - int result = 0; - if (mode == MeasureSpec.EXACTLY) { - result = size; - mRingRadius = result/2 - mBallRadius; - } else { - result = (int) (getPaddingLeft() + getPaddingRight() + mRingRadius * 2 + Math.max(mStokeWidth, mBallRadius * 2)); - if (mode == MeasureSpec.AT_MOST) { - return Math.min(size, result); - } - } - return result; - - } - - private int measurehight(int heightMeasureSpec) { - int size = MeasureSpec.getSize(heightMeasureSpec); - int mode = MeasureSpec.getMode(heightMeasureSpec); - int result = 0; - if (mode == MeasureSpec.EXACTLY) { - result = size; - mRingRadius = result/2 - mBallRadius; - } else { - result = (int) (getPaddingTop() + getPaddingBottom() + mRingRadius * 2 + Math.max(mStokeWidth, mBallRadius * 2)); - if (mode == MeasureSpec.AT_MOST) { - return Math.min(size, result); - } - } - return result; - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - canvas.drawCircle(getWidth() / 2, getWidth() / 2, mRingRadius, mPaint2); - drawBall(canvas, mCurrentAngle * 2 * Math.PI / 360); - } - - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - startAnimation(); - } - - private void drawBall(Canvas canvas, double angle) { - // 根据当前角度获取x、y坐标点 - float x = (float) (getWidth() / 2 + mRingRadius * Math.sin(angle)); - float y = (float) (getHeight() / 2 - mRingRadius * Math.cos(angle)); - - // 绘制圆 - canvas.drawCircle(x, y, mBallRadius, mPaint); - } - - - public void startAnimation() { - mAnimator.start(); - } - - public void stopAnimation() { - mAnimator.end(); - } - - //销毁页面时停止动画 - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - stopAnimation(); - } - - private int dp2px(int dpVal) { - return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, getResources().getDisplayMetrics()); - } -} diff --git a/refreshlayout_core/src/main/java/com/GoRefesh_core/ScrollingUtil.java b/refreshlayout_core/src/main/java/com/GoRefesh_core/ScrollingUtil.java deleted file mode 100644 index 1282deb..0000000 --- a/refreshlayout_core/src/main/java/com/GoRefesh_core/ScrollingUtil.java +++ /dev/null @@ -1,309 +0,0 @@ -/** - * Copyright 2015 bingoogolapple - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.GoRefesh_core; - -import android.graphics.Rect; -import android.os.Build; -import android.support.v4.view.ViewCompat; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.StaggeredGridLayoutManager; -import android.util.Log; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.WebView; -import android.widget.AbsListView; -import android.widget.ScrollView; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -public class ScrollingUtil { - - private ScrollingUtil() { - } - - /** - * 用来判断是否可以下拉 - * 手指在屏幕上该方法才有效 - */ - public static boolean canChildScrollUp(View mChildView) { - if (mChildView == null) { - return false; - } - if (Build.VERSION.SDK_INT < 14) { - if (mChildView instanceof AbsListView) { - final AbsListView absListView = (AbsListView) mChildView; - return absListView.getChildCount() > 0 - && (absListView.getFirstVisiblePosition() > 0 || absListView.getChildAt(0) - .getTop() < absListView.getPaddingTop()); - } else { - return ViewCompat.canScrollVertically(mChildView, -1) || mChildView.getScrollY() > 0; - } - } else { - return ViewCompat.canScrollVertically(mChildView, -1); - } - } - - /** - * Whether it is possible for the child view of this layout to scroll down. Override this if the child view is a custom view. - * 判断是否可以上拉 - */ - public static boolean canChildScrollDown(View mChildView) { - if (Build.VERSION.SDK_INT < 14) { - if (mChildView instanceof AbsListView) { - final AbsListView absListView = (AbsListView) mChildView; - return absListView.getChildCount() > 0 - && (absListView.getLastVisiblePosition() < absListView.getChildCount() - 1 - || absListView.getChildAt(absListView.getChildCount() - 1).getBottom() > absListView.getPaddingBottom()); - } else { - return ViewCompat.canScrollVertically(mChildView, 1) || mChildView.getScrollY() < 0; - } - } else { - return ViewCompat.canScrollVertically(mChildView, 1); - } - } - - public static boolean isScrollViewOrWebViewToTop(View view) { - return view != null && view.getScrollY() == 0; - } - - public static boolean isViewToTop(View view, int mTouchSlop) { - if (view instanceof AbsListView) return isAbsListViewToTop((AbsListView) view); - if (view instanceof RecyclerView) return isRecyclerViewToTop((RecyclerView) view); - return (view != null && Math.abs(view.getScrollY()) <= 2 * mTouchSlop); - } - - public static boolean isViewToBottom(View view) { - if (view instanceof AbsListView) return isAbsListViewToBottom((AbsListView) view); - if (view instanceof RecyclerView) return isRecyclerViewToBottom((RecyclerView) view); -// if (view instanceof WebView) return isWebViewToBottom((WebView) view,mTouchSlop); -// if (view instanceof ViewGroup) return isViewGroupToBottom((ViewGroup) view); - return false; - } - - public static boolean isAbsListViewToTop(AbsListView absListView) { - if (absListView != null) { - int firstChildTop = 0; - if (absListView.getChildCount() > 0) { - // 如果AdapterView的子控件数量不为0,获取第一个子控件的top - firstChildTop = absListView.getChildAt(0).getTop() - absListView.getPaddingTop(); - } - if (absListView.getFirstVisiblePosition() == 0 && firstChildTop == 0) { - return true; - } - } - return false; - } - - public static boolean isRecyclerViewToTop(RecyclerView recyclerView) { - if (recyclerView != null) { - RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); - if (manager == null) { - return true; - } - if (manager.getItemCount() == 0) { - return true; - } - - if (manager instanceof LinearLayoutManager) { - LinearLayoutManager layoutManager = (LinearLayoutManager) manager; - - int firstChildTop = 0; - if (recyclerView.getChildCount() > 0) { - // 处理item高度超过一屏幕时的情况 - View firstVisibleChild = recyclerView.getChildAt(0); - if (firstVisibleChild != null && firstVisibleChild.getMeasuredHeight() >= recyclerView.getMeasuredHeight()) { - if (Build.VERSION.SDK_INT < 14) { - return !(ViewCompat.canScrollVertically(recyclerView, -1) || recyclerView.getScrollY() > 0); - } else { - return !ViewCompat.canScrollVertically(recyclerView, -1); - } - } - - // 如果RecyclerView的子控件数量不为0,获取第一个子控件的top - - // 解决item的topMargin不为0时不能触发下拉刷新 - View firstChild = recyclerView.getChildAt(0); - RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) firstChild.getLayoutParams(); - firstChildTop = firstChild.getTop() - layoutParams.topMargin - getRecyclerViewItemTopInset(layoutParams) - recyclerView.getPaddingTop(); - } - - if (layoutManager.findFirstCompletelyVisibleItemPosition() < 1 && firstChildTop == 0) { - return true; - } - } else if (manager instanceof StaggeredGridLayoutManager) { - StaggeredGridLayoutManager layoutManager = (StaggeredGridLayoutManager) manager; - - int[] out = layoutManager.findFirstCompletelyVisibleItemPositions(null); - if (out[0] < 1) { - return true; - } - } - } - return false; - } - - /** - * 通过反射获取RecyclerView的item的topInset - * - * @param layoutParams - * @return - */ - private static int getRecyclerViewItemTopInset(RecyclerView.LayoutParams layoutParams) { - try { - Field field = RecyclerView.LayoutParams.class.getDeclaredField("mDecorInsets"); - field.setAccessible(true); - // 开发者自定义的滚动监听器 - Rect decorInsets = (Rect) field.get(layoutParams); - return decorInsets.top; - } catch (Exception e) { - e.printStackTrace(); - } - return 0; - } - - - public static boolean isWebViewToBottom(WebView webview, int mTouchSlop) { - return webview != null && ((webview.getContentHeight() * webview.getScale() - (webview.getHeight() + webview.getScrollY())) <= 2 * mTouchSlop); - } - - public static boolean isViewGroupToBottom(ViewGroup viewGroup) { - View subChildView = viewGroup.getChildAt(0); - return (subChildView != null && subChildView.getMeasuredHeight() <= viewGroup.getScrollY() + viewGroup.getHeight()); - } - - public static boolean isScrollViewToBottom(ScrollView scrollView) { - if (scrollView != null) { - int scrollContentHeight = scrollView.getScrollY() + scrollView.getMeasuredHeight() - scrollView.getPaddingTop() - scrollView.getPaddingBottom(); - int realContentHeight = scrollView.getChildAt(0).getMeasuredHeight(); - if (scrollContentHeight == realContentHeight) { - return true; - } - } - return false; - } - - public static boolean isAbsListViewToBottom(AbsListView absListView) { - if (absListView != null && absListView.getAdapter() != null && absListView.getChildCount() > 0 && absListView.getLastVisiblePosition() == absListView.getAdapter().getCount() - 1) { - View lastChild = absListView.getChildAt(absListView.getChildCount() - 1); - - return lastChild.getBottom() >= absListView.getMeasuredHeight(); - //return true; - } - return false; - } - - public static boolean isRecyclerViewToBottom(RecyclerView recyclerView) { - if (recyclerView != null) { - RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); - if (manager == null || manager.getItemCount() == 0) { - return false; - } - - if (manager instanceof LinearLayoutManager) { - // 处理item高度超过一屏幕时的情况 - View lastVisibleChild = recyclerView.getChildAt(recyclerView.getChildCount() - 1); - if (lastVisibleChild != null && lastVisibleChild.getMeasuredHeight() >= recyclerView.getMeasuredHeight()) { - if (Build.VERSION.SDK_INT < 14) { - return !(ViewCompat.canScrollVertically(recyclerView, 1) || recyclerView.getScrollY() < 0); - } else { - Log.d("onInterceptTouchEvent", "ViewCompat=" + !ViewCompat.canScrollVertically(recyclerView, 1)); - return !ViewCompat.canScrollVertically(recyclerView, 1); - } - } - - LinearLayoutManager layoutManager = (LinearLayoutManager) manager; - if (layoutManager.findLastCompletelyVisibleItemPosition() == layoutManager.getItemCount() - 1) { - return true; - } - - } else if (manager instanceof StaggeredGridLayoutManager) { - StaggeredGridLayoutManager layoutManager = (StaggeredGridLayoutManager) manager; - - int[] out = layoutManager.findLastCompletelyVisibleItemPositions(null); - int lastPosition = layoutManager.getItemCount() - 1; - for (int position : out) { - if (position == lastPosition) { - return true; - } - } - } - } - return false; - } - - public static void scrollAViewBy(View view, int height) { - if (view instanceof RecyclerView) ((RecyclerView) view).scrollBy(0, height); - else if (view instanceof ScrollView) ((ScrollView) view).smoothScrollBy(0, height); - else if (view instanceof AbsListView) ((AbsListView) view).smoothScrollBy(height, 0); - else { - try { - Method method = view.getClass().getDeclaredMethod("smoothScrollBy", Integer.class, Integer.class); - method.invoke(view, 0, height); - } catch (Exception e) { - view.scrollBy(0, height); - } - } - } - - - public static void scrollToBottom(final ScrollView scrollView) { - if (scrollView != null) { - scrollView.post(new Runnable() { - @Override - public void run() { - scrollView.fullScroll(ScrollView.FOCUS_DOWN); - } - }); - } - } - - public static void scrollToBottom(final AbsListView absListView) { - if (absListView != null) { - if (absListView.getAdapter() != null && absListView.getAdapter().getCount() > 0) { - absListView.post(new Runnable() { - @Override - public void run() { - absListView.setSelection(absListView.getAdapter().getCount() - 1); - } - }); - } - } - } - - public static void scrollToBottom(final RecyclerView recyclerView) { - if (recyclerView != null) { - if (recyclerView.getAdapter() != null && recyclerView.getAdapter().getItemCount() > 0) { - recyclerView.post(new Runnable() { - @Override - public void run() { - recyclerView.smoothScrollToPosition(recyclerView.getAdapter().getItemCount() - 1); - } - }); - } - } - } - - public static void scrollToBottom(View view) { - if (view instanceof RecyclerView) scrollToBottom((RecyclerView) view); - if (view instanceof AbsListView) scrollToBottom((AbsListView) view); - if (view instanceof ScrollView) scrollToBottom((ScrollView) view); - } - - -} \ No newline at end of file diff --git a/refreshlayout_core/src/main/res/drawable-xhdpi/arrow.png b/refreshlayout_core/src/main/res/drawable-xhdpi/arrow.png deleted file mode 100644 index 3ff84aae9078519ed5924088e35020436ab6b342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1223 zcmbu9e^8PK7{?!8UVccV)LfN>Zav#m)R)77kr`!hRI4+fQYWS#kLCYI$^%hDg8^)Qk^ z%C*-sHX*vP)kMIisc3fMfG;)17TbC z;hMaTlRexJ5FA-D&+@ijKPo(R_hJSk5*?3-j3M{u_aO@JJ;fzp8h$6nCMGZaz5`St zh+qA|dp9rTsVclHTiKgn^o}RY4iH?F21_jYkndU-oX(&3>oj_7fDMp>og=h^9lQuN zA#7u@EB+UvkiHg@hIE{Lnj6~dQ^sR%A)7zM$RbDne8VrkhXkTPu=jNNtYZ+Pks376 z;j^W8eI&~XrC4bfMuOd>EsTqFjLanJ$z(AeT=q8-oX|{dyy2lF{}b&QsK8bgpWj_5 zT-viTZGoyM{TnwizDv{HFmAC}3P;-28y{G{XtoNUB;ARBzu0eOTdXIi>1d9HFgRkK z&8_^~8%QnO1vD ziQ>KnwJTo3Fy&CJ&judVDnc#Y{rZB@>tCh!H#aO=kt^;QPS)l*7w#W2sKbdbeXOyJ ztEslnp}NK0S^k*i*%)DK1QS#LP&a9s8*ZU(V|0eu1(x!widdAhVc%QF>7nJtvi`wW z$WRpVgE(j=EVQ&deDVS~q zDZ?N`L&%ihAn`4&=Yhy2Tb4z@xx4&#BG8+$QMd@)?24uTQ8DAx X@tdK{)+2dm{~*ANiivEF5J~?4Gi3d2 diff --git a/refreshlayout_core/src/main/res/layout/footer_error.xml b/refreshlayout_core/src/main/res/layout/footer_error.xml deleted file mode 100644 index 8b67f2c..0000000 --- a/refreshlayout_core/src/main/res/layout/footer_error.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - \ No newline at end of file diff --git a/refreshlayout_core/src/main/res/layout/footer_finish.xml b/refreshlayout_core/src/main/res/layout/footer_finish.xml deleted file mode 100644 index 31bde0b..0000000 --- a/refreshlayout_core/src/main/res/layout/footer_finish.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - \ No newline at end of file diff --git a/refreshlayout_core/src/main/res/layout/footer_loading.xml b/refreshlayout_core/src/main/res/layout/footer_loading.xml deleted file mode 100644 index 279aef4..0000000 --- a/refreshlayout_core/src/main/res/layout/footer_loading.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/refreshlayout_core/src/main/res/layout/headerview.xml b/refreshlayout_core/src/main/res/layout/headerview.xml deleted file mode 100644 index 47472f2..0000000 --- a/refreshlayout_core/src/main/res/layout/headerview.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/refreshlayout_core/src/main/res/values/attr.xml b/refreshlayout_core/src/main/res/values/attr.xml deleted file mode 100644 index b76468c..0000000 --- a/refreshlayout_core/src/main/res/values/attr.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/refreshlayout_core/src/main/res/values/strings.xml b/refreshlayout_core/src/main/res/values/strings.xml deleted file mode 100644 index f6ed911..0000000 --- a/refreshlayout_core/src/main/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - GoRefesh_core - 正在加载中 - diff --git a/refreshlayout_core/.gitignore b/refreshlayout_lottie/.gitignore similarity index 100% rename from refreshlayout_core/.gitignore rename to refreshlayout_lottie/.gitignore diff --git a/refreshlayout_core/build.gradle b/refreshlayout_lottie/build.gradle similarity index 79% rename from refreshlayout_core/build.gradle rename to refreshlayout_lottie/build.gradle index 6641825..63c1795 100644 --- a/refreshlayout_core/build.gradle +++ b/refreshlayout_lottie/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'com.github.dcendents.android-maven' group='com.github.yanyiqun001' android { - compileSdkVersion 26 - buildToolsVersion "26.0.2" + compileSdkVersion 25 + buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 15 - targetSdkVersion 26 + targetSdkVersion 25 versionCode 1 versionName "1.0" @@ -28,7 +28,7 @@ dependencies { androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:26.1.0' - compile 'com.android.support:recyclerview-v7:26.1.0' testCompile 'junit:junit:4.12' + compile 'com.airbnb.android:lottie:2.2.0' + provided project(':refreshlayout') } diff --git a/refreshlayout_core/proguard-rules.pro b/refreshlayout_lottie/proguard-rules.pro similarity index 100% rename from refreshlayout_core/proguard-rules.pro rename to refreshlayout_lottie/proguard-rules.pro diff --git a/refreshlayout_core/src/androidTest/java/com/GoRefesh_core/ExampleInstrumentedTest.java b/refreshlayout_lottie/src/androidTest/java/com/GoRefesh_core/ExampleInstrumentedTest.java similarity index 100% rename from refreshlayout_core/src/androidTest/java/com/GoRefesh_core/ExampleInstrumentedTest.java rename to refreshlayout_lottie/src/androidTest/java/com/GoRefesh_core/ExampleInstrumentedTest.java diff --git a/refreshlayout_core/src/main/AndroidManifest.xml b/refreshlayout_lottie/src/main/AndroidManifest.xml similarity index 100% rename from refreshlayout_core/src/main/AndroidManifest.xml rename to refreshlayout_lottie/src/main/AndroidManifest.xml diff --git a/refreshlayout/src/main/java/com/GoRefresh/LottieView.java b/refreshlayout_lottie/src/main/java/com/GoRefesh_core/LottieView.java similarity index 95% rename from refreshlayout/src/main/java/com/GoRefresh/LottieView.java rename to refreshlayout_lottie/src/main/java/com/GoRefesh_core/LottieView.java index 144ecc6..d206379 100644 --- a/refreshlayout/src/main/java/com/GoRefresh/LottieView.java +++ b/refreshlayout_lottie/src/main/java/com/GoRefesh_core/LottieView.java @@ -1,10 +1,11 @@ -package com.GoRefresh; +package com.GoRefesh_core; import android.animation.ValueAnimator; import android.content.Context; import android.view.LayoutInflater; import android.view.View; +import com.GoRefresh.IHeaderView; import com.airbnb.lottie.LottieAnimationView; /** @@ -29,7 +30,7 @@ public LottieView(Context context, int layoutId, int lottieViewId) { private void initView(Context context, int layoutId, int lottieViewId) { view = LayoutInflater.from(context).inflate(layoutId, null); - animationView = view.findViewById(lottieViewId); + animationView = (LottieAnimationView) view.findViewById(lottieViewId); } diff --git a/refreshlayout_lottie/src/main/res/values/strings.xml b/refreshlayout_lottie/src/main/res/values/strings.xml new file mode 100644 index 0000000..ed7de6e --- /dev/null +++ b/refreshlayout_lottie/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + GoRefesh_lottie + diff --git a/refreshlayout_core/src/test/java/com/GoRefesh_core/ExampleUnitTest.java b/refreshlayout_lottie/src/test/java/com/GoRefesh_core/ExampleUnitTest.java similarity index 100% rename from refreshlayout_core/src/test/java/com/GoRefesh_core/ExampleUnitTest.java rename to refreshlayout_lottie/src/test/java/com/GoRefesh_core/ExampleUnitTest.java diff --git a/settings.gradle b/settings.gradle index 618a334..77c9f12 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':app', ':refreshlayout', ':refreshlayout_core' +include ':app', ':refreshlayout', ':refreshlayout_lottie'