当前位置: 首页 > 知识库问答 >
问题:

滚动时动画RecycerView

晏和风
2023-03-14

当我滚动RecycerView时,有什么方法可以使它的元素动画化吗?

我查看了DefaultItemAnimatorRecycerView.ItemAnimator,但似乎只有在数据集发生更改时才调用动画,如果我错了,请纠正我。

然而,回到我的问题,我如何动画RecycerView?我希望一些元素有另一个不透明度,依赖于一些自定义规则。

我做了一些更多的重申,似乎动画移动正是我正在寻找的。这些方法是从dispatchlayout()调用的。下面是该方法的javadoc:

layoutChildren()包装器,处理由布局引起的动画更改。动画的工作假设有五种不同的物品在游戏中:
persistent:在删除布局
之前和之后,项是可见的:项目在布局前可见,并被添加的应用程序删除
:项在布局前不存在,是由应用程序添加的
消失:项目在布局之前/之后存在于数据集中,但在布局过程中从可见变为不可见(它们作为其他变化的副作用被移出屏幕)
出现:项目在布局之前/之后存在于数据集中,但在布局过程中从不可见变为可见(它们作为其他变化的副作用被移到屏幕上)
总体方法计算出布局之前/之后存在哪些项目,并为每个项目推断出上述五种状态之一。然后相应地设置动画:
移动持久视图({@link itemanimator#animatemove(Viewolder,int,int,int,int,int)})移除视图({@link itemanimator#animateemove(Viewolder)})
添加视图({@link itemanimator#animateAdd(viewolder)})
将消失视图移出屏幕
将出现视图移到屏幕上

到目前为止,我正在寻找持久化、消失和出现,但这些方法从未被调用,因为这里有一行:

boolean animateChangesSimple = mItemAnimator != null && mItemsAddedOrRemoved
            && !mItemsChanged;

mitemsaddedorremoved总是为false,因此不会到达任何回调。知道如何正确设置设置标志吗?

共有1个答案

谢英耀
2023-03-14

最后,我使用了onScrollListener并在自定义的animate()方法中对其进行动画化。在我的例子中,代码只需要2ms,所以对于60fps来说没有问题。

recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(int newState) {
        if(newState == RecyclerView.SCROLL_STATE_IDLE) {
            // special handler to avoid displaying half elements
            scrollToNext();
        }
        animate();
    }

    @Override
    public void onScrolled(int dx, int dy) {
        animate();
    }
});
 类似资料:
  • 我目前正在使用JavaFX ScrollBar控件,它本身运行良好-但是我对拖动拇指时的“动画”不满意。 更具体地说: 当我快速拖动拇指时,快速加速-拇指动画不会立即跟随,但有点“滞后”-当我停止拖动拇指时的相同行为。。。拇指真正开始/追上预定位置需要一秒钟的时间 这不是繁重的布局计算之类的问题,因为我只是单独渲染ScrollBar而没有任何内容。 是否有一些选项可以让这个“加速动画”/“滞后”消

  • 问题内容: 我一直在寻找一种仅使用CSS3单击位于页面顶部的按钮时向下滚动的方法。 但这对于我的需求而言有点太先进了,因为我只希望浏览器单击页面顶部的一个按钮即可向下滚动,所以我想知道:是否可以在没有输入按钮的情况下进行那些CSS滚动,有锚标签? HTML看起来像这样: 我已经有一些CSS,需要在单击按钮时触发: 问题答案: 您可以使用css3 伪选择器使用锚标记来完成此操作,当与当前URL哈希具

  • 动画outputRoll InRoll Out

  • 在React中处理滚动位置的正确方法是什么?我真的很喜欢平滑滚动,因为更好的用户体验。因为在React中操作DOM是一个反模式,所以我遇到了一个问题:如何平滑地滚动到某个位置/元素?我通常会更改元素的scrollTop值,但这是对DOM的操作,这是不允许的。 杰斯宾 代码: 如何以反应的方式实现这一点?

  • 我想写个动画。比如说鼠标向上滚动,一个div往上运动。当我鼠标向下的时候,div往下运动。 有没有这种动画库?我以前的做法是判断滚动方向。然后分别执行不同的动画函数。当然了我的一个动画里面,肯定是包含好几个运动元素的。

  • 问题内容: 我的意思是滚动时会轻松。 问题答案: var $pages = $(“.page”), PS: 使用,如果你的s为像一个滚动的DIV内(而不是) 注意: 对于 移动设备, 您可能希望针对浏览器的标签栏高度调整值(最好还是完全避免这种情况)。你有主意

  • 我在Swing和设置角色动画方面有一些问题,我有一个带有关键侦听器的JFrame,当用户点击时,它在这里调用我的JPanel方法 这个动画我的角色,但这么快,我们可以看到一个东西,我怎么才能看到动画?