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

如何在适配器初始化时(按顺序)动画RecycerView项?

杨飞飙
2023-03-14

我想要完成的

我想使项目在一个线性垂直回收视图显示的顺序。我希望第一项出现,然后第二项,然后第三项等等。这是一个例子类型的动画,我试图完成。

我所尝试的

public class ParentCommentsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private int lastPosition = -1;

    //constructor and other code not shown...

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
        switch (viewHolder.getItemViewType()) {
            case OP:
                OPViewHolder ovh = (OPViewHolder) viewHolder;
                configureOPViewHolder(ovh, position);
                setAnimation(ovh.getContainer(), position);
                break;
            case COMMENT:
                CommentViewHolder cvh = (CommentViewHolder) viewHolder;
                configureCommentViewHolder(cvh, position);
                setAnimation(cvh.getContainer(), position);
                break;
            default:
                RecyclerViewSimpleTextViewHolder vh = (RecyclerViewSimpleTextViewHolder) viewHolder;
                configureDefaultViewHolder(vh, position);
                break;
        }

    }

    @Override
    public void onViewDetachedFromWindow(final RecyclerView.ViewHolder viewHolder)
    {

        switch (viewHolder.getItemViewType()) {
            case OP:
                ((OPViewHolder)viewHolder).clearAnimation();
                break;
            case COMMENT:
                ((CommentViewHolder)viewHolder).clearAnimation();
                break;
            default:
                break;
        }
    }

    private void configureDefaultViewHolder(RecyclerViewSimpleTextViewHolder vh, int position) {
        //code...
    }

    private void configureOPViewHolder(OPViewHolder vh1, int position) {
        //code...
    }

    private void configureCommentViewHolder(CommentViewHolder vh2, int position) {
        //code...
    }

    private void setAnimation(View viewToAnimate, int position)
    {
        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition)
        {
            Animation animation = AnimationUtils.loadAnimation(context, R.anim.fade_in);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }

}

共有1个答案

端木皓君
2023-03-14

调用setadapter后,可以运行以下内容:

recyclerView.getViewTreeObserver().addOnPreDrawListener(
        new ViewTreeObserver.OnPreDrawListener() {

            @Override
            public boolean onPreDraw() {
                recyclerView.getViewTreeObserver().removeOnPreDrawListener(this);

                for (int i = 0; i < recyclerView.getChildCount(); i++) {
                    View v = recyclerView.getChildAt(i);
                    v.setAlpha(0.0f);
                    v.animate().alpha(1.0f)
                            .setDuration(300)
                            .setStartDelay(i * 50)
                            .start();
                }

                return true;
            }
        });

示例显示了简单的alpha动画,但您可以在循环中运行您想要的,并调整内插器、持续时间和开始延迟。

 类似资料:
  • 我有一个Java Spring Boot应用程序,在我的Maven pom.xml中将Flyway配置为依赖项(我有一个父pom和一个项目pom...Flyway是在我的项目pom中定义的)。 application.properties中只有几个条目: 我可以运行一个maven任务来让Flyway运行来创建/更新我的数据库,然后针对该数据库运行我的应用程序,但是我很难通过运行我的应用程序(这在p

  • 同事, 你能帮我解决以下问题吗? 我有JavaEE应用程序。它包含一些具有业务逻辑的消息驱动Bean和一些负责整个应用程序配置的不同方面的管理Bean。我想设置bean启动和初始化的顺序。这意味着在管理Bean完成应用程序的初始化之前,容器不应该调用消息驱动Bean。应用程序的初始化包括读取和解析一些配置文件,这需要一些时间。 有WebSphere配置选项吗? 或者它应该只以编程方式完成技巧?

  • 问题内容: 我有多个上下文文件。要求是:在其余的Bean中首先初始化一个特定的Bean(进行一些配置更改)。 有没有一种方法可以首先加载该bean? 一种选择是使用“取决于”属性。 但这将需要更新所有其他bean,因此这似乎不是最佳解决方案。 我们有更好的选择吗? 问题答案: 恕我直言,您应该等待它们修复https://jira.spring.io/browse/SPR-3948 一种可能的方法是

  • 问题内容: 我正在尝试发现初始化发生的顺序,或者更确切地说,为什么要按此顺序进行初始化的原因。给定代码: 输出: 但是,将的声明移动到初始化块之前会产生: 而且我完全不知道为什么会以这种顺序发生。此外,如果我在的声明中消除了关键字,则init块和构造函数均不会触发。谁能帮我这个忙吗? 问题答案: 我认为您只是缺少JLS的12.4.2节,其中包括: 接下来,以文本顺序执行类的类变量初始化器和静态初始

  • 问题内容: 我是来自C 背景的Python新手。虽然我知道用我以前的C 知识来尝试找到匹配的概念并不是Pythonic,但我认为这个问题仍然是一个普遍的问题: 在C 中,由于C 无法确定哪个全局/静态变量将首先在编译单元中初始化,因此存在一个众所周知的全局/静态变量初始化顺序失败的问题,因此,全局/静态变量取决于不同编译中的另一个变量单元可能比其依赖项对应的对象早初始化,并且当依赖项开始使用依赖项

  • 问题内容: 我试图将JVM中的初始化和实例化过程组合在一起,但是JLS在一些细节上有点笨拙,因此,如果有人介意清理一些细节,将不胜感激。到目前为止,这是我能够弄清楚的。 初始化 递归初始化该类及其接口的静态最终变量,这些变量是编译时间常数。 从递归中退出,按文本顺序处理静态块和静态字段。 实例化 递归初始化作为编译时间常数的类的最终实例变量。 按文本顺序退出递归处理非静态块和实例字段,并在返回时将