gpt4 book ai didi

java - RecyclerView 装饰无法正确滚动

转载 作者:行者123 更新时间:2023-12-02 12:35:52 25 4
gpt4 key购买 nike

我有一个 RecyclerView,它使用简单的行分隔符装饰。

装饰很好,除了当新项目添加到回收器底部并滚动到 View 中时,装饰最初绘制在其最终位置,然后下面的 View 滚动到位,但装饰不滚动。

所需的行为是在其起始位置绘制装饰,然后与新项目一起滚动到位置。

以下是装饰的相关部分:

class NormalDecoration extends RecyclerView.ItemDecoration {
private int spacing;
private Drawable drawable;

NormalDecoration(Context context) {
spacing = context.getResources().getDimensionPixelOffset(R.dimen.chat_separator_height);
drawable = ContextCompat.getDrawable(context, R.drawable.chat_divider);
}

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);

if (applySpacing(view, parent)) {
outRect.top += spacing;
}
}

boolean applySpacing(View view, RecyclerView parent) {
int position = parent.getChildAdapterPosition(view);

return position != -1 && position < mItems.size();
}

@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
int dividerLeft = parent.getPaddingLeft();
int dividerRight = parent.getWidth() - parent.getPaddingRight();

for(int index = parent.getChildCount() - 1 ; index >= 0 ; --index) {
View view = parent.getChildAt(index);

if(applySpacing(view, parent)) {
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();

int dividerTop = view.getBottom() + params.bottomMargin;
int dividerBottom = dividerTop + spacing;

drawable.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
drawable.draw(c);
}
}
}
}

我的适配器包含以下帮助程序:

class Adapter {
public void add(final int index, final IChatMessageItem item) {
mItems.add(index, item);
notifyItemInserted(index);
}
}

以下是我如何将项目添加到回收器,从而导致 Not Acceptable 滚动行为:

...
adapter.add(index, item);
layout.scrollToPosition(index);
...

最佳答案

您需要分别使用 view.getTranslationX()getTranslationY()getAlpha() 来为装饰和 View 移动。

如果你只是画一个分隔线,你可能想使用官方的support decoration这也执行上述操作。

我还写过一篇文章详细介绍了这一点here .

关于java - RecyclerView 装饰无法正确滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45151097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com