gpt4 book ai didi

android - ItemDecoration 覆盖 getItemOffsets() 和动画

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:08 26 4
gpt4 key购买 nike

我通过覆盖 getItemOffsets() 方法(请参阅下面的代码)使用 GridLayoutManager 为我的 RecyclerView 应用相等的边距。

但是,当一个对象从适配器中移除时,移除动画会在没有偏移的情况下被调用。因此,动画开始于与要移除的对象不同的位置。

我试图通过 getSpanIndex(position) 获取位置,但位置 (parent.getChildAdapterPosition(view)) 返回 NO_POSITION,因为当调用 getItemOffsets() 时,对象已经从适配器中移除。

在我的案例中有什么方法可以获得偏移量吗?

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

GridLayoutManager mgr = parent.getLayoutManager();
int position = parent.getChildAdapterPosition(view);

if (position == RecyclerView.NO_POSITION) {
// here I need to access the position of the current element
// and call outRect.set(left, top , right, bottom);
// which is not possible because it is no longer in the adapter
return;
}

int spanCount = mgr.getSpanCount();
int spanSize = mgr.getSpanSizeLookup().getSpanSize(position);
int spanIndex = mgr.getSpanSizeLookup().getSpanIndex(position, spanCount);

if (spanIndex == spanCount-1) {
// last element
left = space / 2;
right = space;
} else if (spanIndex == 0) {
// first element
left = space;
right = space / 2;
} else {
// middle element
left = space / 2;
right = space / 2;
}
outRect.set(left, top, right, bottom);
}

最佳答案

尝试使用 View LayoutParams。如果您不使用某些自定义 LayoutManager,它应该包含您需要的信息。

int position = ((RecyclerView.LayoutParams) view.getLayoutParams()).getViewAdapterPosition();

关于android - ItemDecoration 覆盖 getItemOffsets() 和动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34575853/

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