2017-01-14 87 views
0

我想itemDecoration畫分頻器只有前三名的孩子。所以,我在正確的時間返回onDraw。但是,我發現itemDecoration onDraw()延遲了。並且因爲繪製分隔器動作延遲到回收視圖滑動結束。爲什麼RecyclerView的onDraw延遲

這裏是我的ItemDecoration的onDraw()方法:

@Override 
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { 
    RecyclerView.Adapter adapter = parent.getAdapter(); 
    if (adapter == null) { 
     return; 
    } 

    int itemCount = adapter.getItemCount(); 
    int lastDividerOffset = getLastDividerOffset(parent); 
    int validChildCount = parent.getChildCount(); 
    int lastChildPosition = -1; 
    for (int i = 0; i < validChildCount; i++) { 
     //只給前三個child設置 divider 
     View child = parent.getChildAt(i); 
     int childAdapterPosition = parent.getChildAdapterPosition(child); 
     if (childAdapterPosition >= 3) { 
      return; 
     } 

getItemOffsets()方法:

@Override 
public void getItemOffsets(Rect rect, View v, RecyclerView parent, RecyclerView.State state) { 
    final int childCount = parent.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
     View child = parent.getChildAt(i); 
     int childAdapterPosition = parent.getChildAdapterPosition(child); 
     if (childAdapterPosition >= 3) { 
      return; 
     } 
    } 
    int position = parent.getChildAdapterPosition(v); 
    int itemCount = parent.getAdapter().getItemCount(); 
    int lastDividerOffset = getLastDividerOffset(parent); 
    if (!mShowLastDivider && position >= itemCount - lastDividerOffset) { 
     // Don't set item offset for last line if mShowLastDivider = false 
     return; 
    } 

    int groupIndex = getGroupIndex(position, parent); 
    if (mVisibilityProvider.shouldHideDivider(groupIndex, parent)) { 
     return; 
    } 

    setItemOffsets(rect, groupIndex, parent); 
} 

感謝。

+0

你是什麼意思「延遲」? – pskink

+0

回收結束後總是顯示分隔符。分隔繪圖可能會等待1秒鐘。 – ZhangTengyuan

回答