今天把项目中的下拉刷新改为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)就可以了

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Phonegap开发Android版本的二维码扫码
  3. 如何使用ProgressBar动态设置进度条渐变
  4. android setting 設置<二>
  5. Android中设置全屏和屏幕常亮方法
  6. Android(安卓)顶级视图DecorView的前世今生
  7. Android几行代码解决键盘遮挡问题
  8. ubuntu环境下反编译android apk
  9. Android图形处理-Drawabble

随机推荐

  1. 上官网学android之二(Building your First
  2. Android(安卓)属性动画(二)
  3. Android(安卓)- Handler is abstract, ca
  4. Android ID
  5. Android下so注入汇总
  6. android 神奇的android:clipChildren属性
  7. ProgressBar使用详解(进度条动画)
  8. Android(安卓)音乐播放器 完整案例分析
  9. Android引入签名文件
  10. Android(安卓)8.1 来电显示SIM卡