SwipeRefreshLayout在onCreate使用set

作者: lee小杰 | 来源:发表于2016-06-20 11:54 被阅读566次

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

    相关文章

      网友评论

        本文标题:SwipeRefreshLayout在onCreate使用set

        本文链接:https://www.haomeiwen.com/subject/uuqhdttx.html