今天把項(xiàng)目中的下拉刷新改為android官方SwipeRefreshLayout梯浪,在onCreate中調(diào)用setRefreshing(true)竟然沒有小圓圈出現(xiàn)查剖,讓我很奇怪甘穿,于是決定看看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 */);
}}
首先是一個(gè)判斷混坞,關(guān)鍵在于mRefreshing是不是false磁奖,看了下代碼脉顿,mRefreshing默認(rèn)為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繪制完后才能調(diào)用,可以用view自帶的post方法來調(diào)用setRefreshing(true)就可以了