2017-01-14 5 views
0

私はトップ3の子供だけのitemDecoration描画ディバイダが必要です。だから、私は正しい時間にonDrawを返します。しかし、itemDecoration onDraw()が遅れていることがわかりました。そして、原因はスライダの端をリサイクルするためにディバイダの動作を遅らせます。なぜRecyclerView onDraw Delay

@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); 
} 

おかげでここ

は私のItemDecoration onDraw()メソッドです。

+0

「遅延」とはどういう意味ですか? – pskink

+0

リサイクルは、スライドエンド後に常にディバイダを表示します。分周器の描画は1秒間待つことがあります。 – ZhangTengyuan

答えて

0

xmlの設定アニメーションによってこの問題が発生します。