我有以下代码来设置RecyclerView项目的动画。这工作得很好,但如果我向下滚动,它会为所有出现的项目设置动画。
我想要的是类似于Google Play音乐应用程序中的行为,其中动画仅为最初可见的项目播放。通过滚动变得可见的项目应该出现在没有动画适配器的情况下。知道如何存档这种行为吗?
public class RecyclerViewAnimationAdapter : RecyclerView.Adapter
{
private int m_LastPosition = -1;
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
base.OnBindViewHolder(holder, position);
animateItem(position, holder.ItemView);
}
public override void OnViewDetachedFromWindow(Object holder)
{
base.OnViewDetachedFromWindow(holder);
var viewToAnimate = ((RecyclerView.ViewHolder) holder).ItemView;
viewToAnimate.ClearAnimation();
}
private void animateItem(int position, View viewToAnimate)
{
if (position > m_LastPosition)
{
var animation = AnimationUtils.LoadAnimation(Application.Context, Resource.Animation.slide_in_bottom);
viewToAnimate.StartAnimation(animation);
m_LastPosition = position;
}
}
}
我在Android Studio中测试了这个方法,它成功了,通过一些小调整,它也应该适用于你:
class YourAdapter extends RecyclerView.Adapter{
private int lastPosition = -1;
private boolean isAnimation;
YourAdapter(... )
{
...
this.isAnimation = true;
}
....
private void switchAnimation(boolean isAnimation)
{
this.isAnimation = isAnimation;
}
private void animateItem(int position, View viewToAnimate)
{
if (position > m_LastPosition && isAnimation)
{
var animation = AnimationUtils.LoadAnimation(Application.Context, Resource.Animation.slide_in_bottom);
viewToAnimate.StartAnimation(animation);
lastPosition = position;
}
}
}
然后在LayoutManager中重写方法onLayoutChildren
(您必须将代码调整为C#):
layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false){
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
super.onLayoutChildren(recycler, state);
myAdapter.switchAnimation(false);
}
};
如果有帮助,请告诉我;)
视图将被重新创建,使过渡变得非常奇怪,因为它在下一个项目移动的同时会在该项目的上方褪色。出现的新视图没有调整大小,它已处于完整大小。 重新创建视图时,旧视图淡出,新视图淡出,这会使视图背景颜色闪烁。 我还尝试在动画期间在item视图上设置,但这种方法的问题是RecycleView的布局会立即更新,并且不会跟随动画。 我已经为这两次尝试创建了一个小的演示项目。项目的来源在这里。
我的问题:我的ListView中的一个项目在我开始滚动后会动画。它不是最后一项,动画应该完成。一旦问题消失,我滚动后,它只发生一次,并且只发生在列表中的单个项目上。 在我开始滚动ListView之后,如何停止单个项目的动画制作? 我希望在将项目添加到适配器时,动画仅运行一次。 我有一个列表适配器,当项目添加到列表中时,我在其中对它们进行动画处理。我正在使用声明的动画器在适配器的getView()方
我想在recyclerview中创建可扩展的项目,我想,使用MotionLayout创建动画会非常简单。我创建了运动场景,并测试了当在回收器视图中视图无法设置动画时,单个项目是否能够独立工作。 我试着显示所有调试信息,它说转换正在进行,但recyclerview没有显示任何动画。我试着通知项目动画师,动画已经在我的viewholder上启动,但没有成功。 我预计motinolayout状态转换将在
我已经用适配器和所有东西实现了一个回收器视图。我可以用 然后运行列表以通知适配器此更改 到目前为止一切顺利。我现在想做的是交换列表中的两个项目,并动画显示这一变化。 问题是,这不是动画,我不知道为什么。 我确实想要一些类似于简单反向动画的东西。 有什么想法吗?
问题内容: 目前,我正在尝试像behaivior 一样实现Google Inbox ,并且我对电子邮件打开动画非常好奇。 我的问题是:该怎么做?我的意思是,他们使用了哪种方法?他们是否使用并更改了填充父母的高度?还是其他?如果这样做的话,他们如何通过拉动手势使其闭合,而底层元素则稍微可见。 谁能帮助我指向一些库或代码段/示例? 问题答案: 您的意思是:将recyclerview作为一个加载项,或者
我是第一次使用 。一切正常,除了没有关于项目删除的动画,即使添加项目的动画工作正常。 我没有设置任何自定义项目动画师,但根据留档: 默认情况下,在<code>RecyclerView</code>中启用添加和删除项目的动画。 因此,删除时的动画应该可以正常工作。 我希望在删除时具有默认动画,但无法使其正常工作。 这是我如何设置RecycleView: 这是我的适配器: Fragment_routi