SwipeRefreshLayout在onCreate使用setRefreshing(true)无效
16lz
2021-01-24
今天把项目中的下拉刷新改为android官方SwipeRefreshLayout,在onCreate中调用setRefreshing(true)竟然没有小圆圈出现,让我很奇怪,于是决定看看setRefreshing的源码。
public void setRefreshing(boolean refreshing) { if (refreshing && mRefreshing != refreshing) { // scale and show mRefreshing = refreshing; int endTarget = 0; if (!mUsingCustomStart) { endTarget = (int) (mSpinnerFinalOffset + mOriginalOffsetTop); } else { endTarget = (int) mSpinnerFinalOffset; } setTargetOffsetTopAndBottom(endTarget - mCurrentTargetOffsetTop, true /* requires update */); mNotify = false; startScaleUpAnimation(mRefreshListener); } else { setRefreshing(refreshing, false /* notify */); }}
首先是一个判断,关键在于mRefreshing是不是false,看了下代码,mRefreshing默认为false的。
然后就是setTargetOffsetTopAndBottom方法了。可以看下方法的源代码。
private void setTargetOffsetTopAndBottom(int offset, boolean requiresUpdate) { mCircleView.bringToFront(); mCircleView.offsetTopAndBottom(offset); mCurrentTargetOffsetTop = mCircleView.getTop(); if (requiresUpdate && android.os.Build.VERSION.SDK_INT < 11) { invalidate(); }}
可以看出代码是确定小圆圈的位置。
mCurrentTargetOffsetTop是在onMeasure中确定的,所以小圆圈要在SwipeRefreshLayout绘制完后才能调用,可以用view自带的post方法来调用setRefreshing(true)就可以了
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- Phonegap开发Android版本的二维码扫码
- 如何使用ProgressBar动态设置进度条渐变
- android setting 設置<二>
- Android中设置全屏和屏幕常亮方法
- Android(安卓)顶级视图DecorView的前世今生
- Android几行代码解决键盘遮挡问题
- ubuntu环境下反编译android apk
- Android图形处理-Drawabble