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()メソッドです。
「遅延」とはどういう意味ですか? – pskink
リサイクルは、スライドエンド後に常にディバイダを表示します。分周器の描画は1秒間待つことがあります。 – ZhangTengyuan