dinuscxj / RecyclerRefreshLayout

A pull to refresh layout for android, the RecyclerRefreshLayout is based on the SwipeRefreshLayout. support all the views, highly customizable, code simplicity, etc. really a practical RefreshLayout!
1.67k stars 253 forks source link

我下拉刷新时 textview会闪一下,但是imageview就没事 是什么原因 #21

Closed YongshengLuan closed 7 years ago

YongshengLuan commented 7 years ago

请问 博主有遇到过吗

BreankingBad commented 7 years ago

@YongshengLuan 我也遇到了 原因应该是你的textview宽度设置为wrap_content,当调用setText时导致重新layout,而RecyclerRefreshLayout的onlayout实现是把refreshView和TargetView布局到原始的位置,所以会出现闪烁的现象,解决办法有两个: 1、textview宽度设置为固定宽度 2、从根源上解决问题,RecyclerRefreshLayout的onlayout的实现改为:

    if (getChildCount() == 0) {
        return;
    }

    ensureTarget();
    if (mTarget == null) {
        return;
    }

    final int width = getMeasuredWidth();
    final int height = getMeasuredHeight();
    final int childTop = getPaddingTop();
    final int childLeft = getPaddingLeft();
    final int childWidth = width - getPaddingLeft() - getPaddingRight();
    final int childHeight = height - getPaddingTop() - getPaddingBottom();

    int targetTop, refreshViewTop;
    switch (mRefreshStyle) {
        case FLOAT:
            refreshViewTop = (int) mTargetOrRefreshViewOffsetY;
            targetTop = childTop;
            break;
        case PINNED:
            refreshViewTop = (int) mRefreshInitialOffset;
            targetTop = (int) mTargetOrRefreshViewOffsetY;
            break;
        default:
            refreshViewTop = (int) (mRefreshInitialOffset + mTargetOrRefreshViewOffsetY);
            targetTop = (int) (childTop + mTargetOrRefreshViewOffsetY);
            break;
    }

    mTarget.layout(childLeft, targetTop, childLeft + childWidth, targetTop + childHeight);

    mRefreshView.layout((width / 2 - mRefreshView.getMeasuredWidth() / 2), refreshViewTop,
            (width / 2 + mRefreshView.getMeasuredWidth() / 2), refreshViewTop + mRefreshView.getMeasuredHeight());

以上实现我只在default样式测试过,其他样式你看对不对

YongshengLuan commented 7 years ago

好的我试试 谢谢啦

dinuscxj commented 7 years ago

fix https://github.com/dinuscxj/RecyclerRefreshLayout/commit/3e6a553293959942d94cfaadd8cc8d5299bbc389 and release 2.0.5