按照Building a RecyclerView LayoutManager article我已经创造了RecyclerView自己的自定义布局管理器,但由于可用的几个文件,我不能找到一种方法来强制回收视图从布局管理器内重建动画(就像使用notifyItemInserted或notifyItemDeleted时的动画)。这些动画由recyclerView及其项目动画师控制,开发者只能控制物品的位置。 所以我有一个方法fill
,它根据当前滚动位置和布局管理器的状态执行放置子视图。这样的方法从两个地方被调用,回收站的观点自定义布局管理动画
在onLayoutChildren(当布局管理器执行的项目初始化放置或当数据集被改变了这种方法被称为)
@Override public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { detachAndScrapAttachedViews(recycler); fill(recycler); }
在scrollVerticallyBy
/** calculate offset of views while scrolling, layout items on new places*/ @Override public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) { dy = scrollVerticallyInternal(dy); offsetChildrenVertical(-dy); if (condition) { //todo refactor it, blinking now without animation. detachAndScrapAttachedViews(recycler); } fill(recycler); return dy; }
而且我想在遇到一些condition
对某些视图和动画执行更复杂的转换。
它可能以某种方式是否开始布点儿童流动,到达时onLayoutChildren
方法将被RecyclerView被调用。
我能够与detachAndScrapAttachedViews(recycler)
做到这一点,并发起onLayoutChildren
和运行默认fill
的过程,但这种转变将立即没有任何动画进行。
是否有可能迫使recyclerView(或布局管理器)内从布局管理器来运行其动画?
downvote的原因是什么?请在这种情况下发表评论家伙 – Beloo