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

如何创建插入动画效果?

从景曜
2023-03-14

当前,如果我使用两个按钮“add”和“remove”,然后在recyclerview上执行相应的操作(notifyItemInserted()notifyItemRemoved(),则动画效果很好。

如果我以编程方式循环数据集并再次使用notifyItemInserted()添加项,我不会看到任何动画。我只是看到所有的项目几乎同时出现。

如果我使用具有线性延迟的Asynctasks,然后添加/删除OnPostExecute()中的项,仍然看不到任何动画。此外,如果多个insert线程等待所有remove线程完成(没有地方让remove线程运行),我还看到可能会出现死锁。

我做错了什么?

我已经在SO上讨论了与此相关的大部分问题,并且花了几天时间在recyclerview的动画部分上打探了一下,仍然没有运气。

共有1个答案

郑晨
2023-03-14

下面是我如何在适配器添加动画。这将动画一个推的效果,行从右边进来。

首先用xml定义动画(res/anim/push_left_in.xml)

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p" android:toXDelta="0"
        android:duration="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="300" />
</set>

然后在适配器中设置为

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row;
    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(getContext());
        row = inflater.inflate(R.layout.music_list_item, null);
    } else {
        row = convertView;
    }

    ...

    //Load the animation from the xml file and set it to the row
    Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.push_left_in);
    animation.setDuration(500);
    row.startAnimation(animation);

    return row;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
    holder.text.setText(items.get(position));

    // Here you apply the animation when the view is bound
    setAnimation(holder.container, position);
}

/**
 * Here is the key method to apply the animation
 */
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, android.R.anim.push_left_in);
        viewToAnimate.startAnimation(animation);
        lastPosition = position;
    }
}
 类似资料:
  • 问题内容: 我需要旋转div并停止在特定位置(该值将从服务器接收)。 我尝试使用本机JS进行旋转和停止,但它占用了我的CPU大量时间。 我可以旋转CSS动画,但是我需要创建一个类,该类将动态描述停止动画的位置。就像是 提前致谢 问题答案: 好吧,我认为动态创建 它们 并不容易, 因为它们必须是硬编码的,所以它们不灵活。 过渡稍微容易一些,因为它们可以优雅地响应JavaScript进行的CSS更改。

  • 关于 Flash 图形 Flash (SWF) 文件格式是一种基于矢量的图形文件格式,它用于适合 Web 的可缩放小尺寸图形。由于这种文件格式基于矢量,因此,图稿可以在任何分辨率下保持其图像品质,并且非常适于创建动画帧。在 Illustrator 中,可以在图层上创建单独的动画帧,然后将图像图层导出到网站上使用的单独帧中。也可以在 Illustrator 文件中定义符号以减小动画的大小。在导出后,

  • 我需要在我的应用程序中有一个心跳动画,比如这个或这个。我不介意使用外部资源,只要我能控制脉搏率。在谷歌搜索了这么多之后,很多人建议使用,但我不知道该如何获得我需要的东西。 那么如果有人知道如何实现这样的事情呢?

  • 问题内容: 我想创建一个可以用插件扩展的Java程序。我该怎么办?我应该在哪里找? 我有一组插件必须实现的接口,它应该在jar中。该程序应在相对(相对于该程序)文件夹中监视新的jar,并以某种方式注册它们。 尽管我确实喜欢Eclipse RCP,但我认为这对于我的简单需求来说实在太多了。 对于Spring同样适用,但是既然我还是要研究它,我不妨尝试一下。 但是,我仍然希望找到一种方法来尽可能简单地

  • 画布中的动画与一般的动画在理论上并没有太大的区别。动画的本质就是一连串的图像,每个图像之间的差别非常微小, 并且它们以极快的速度连续显示,每秒钟显示的图像非常多,人的肉眼通常认为自己看到的是一个正在运动的物体,而不是一张张连续显示的静态图像。 其原理就像你在学校读书时翻书一样,如果你翻书的速度足够快,一些小图形看上去就好像在运动。 仔细思考一下,你就会发现当使用代码创建动画时,只有一张纸可用,这张

  • 关于 Flash 图形 Flash (SWF) 文件格式是一种基于矢量的图形文件格式,它用于适合 Web 的可缩放小尺寸图形。由于这种文件格式基于矢量,因此,图稿可以在任何分辨率下保持其图像品质,并且非常适于创建动画帧。在 Illustrator 中,可以在图层上创建单独的动画帧,然后将图像图层导出到网站上使用的单独帧中。也可以在 Illustrator 文件中定义符号以减小动画的大小。在导出后,