2016-08-16 152 views
0

我有一个RecyclerView,即时动画单个列表项目中的视图,但是当我滚动recyclerview时,动画停止。这是因为recyclerview从它的视图中移除了这些项目,所以当我们回滚它时,它将它取回!但是现在我想让动画继续前进,因为只有当我从服务器获取数据时才会停止动画!在滚动视图时停止在recyclerview中的项目动画android

我所需要的是我在recylerview内的各个项目中启动的动画不应该停止,即使recyclerview滚动并且视图不在焦点并且回到焦点!我需要在获取服务器数据时停止代码中的动画!我有代码停止动画,它的作品,如果该项目不滚动视图!

btn.onClick - 这个按钮是的onClick为recyclerview列表 项目1 btn.startAnimation(anim.xml) - 启动动画

的onSuccess - 服务器返回成功btn.clearAnimation( );

但在onSuccess之前,如果我们滚动列表,动画停止!

请帮忙!

+0

我有类似的问题,但[Alexandre Beaulieu的回复](https://stackoverflow.com/a/39021525/5003363)为我工作。你应该检查一下。 –

回答

0

很难给你一个完整的解决方案,但你有没有尝试在您使用的ViewHolder内保存动画状态?我建议在最初设置为false,并在你的onBindViewHolder(...)方法,你可以这样做

if (viewHolder.isAnimating) { 
    // start animation 
} else { 
    // clear animation 
} 

viewHolder.btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      viewHolder.isAnimating = true; 
      // start animation 
     } 
    }); 
0

通过从crymson的回答启发你喜欢isAnimating定义的ViewHolder类保存布尔标志我已经有点简单,而是使用View的标记方法,而不是在自定义适配器的复杂逻辑中设置布尔值。

@Override 
public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) { 
    super.onViewDetachedFromWindow(holder); 
    if (holder.getItemViewType() == TYPE_AD) 
     ((ViewHolderForAd) holder).ivStory.setTag(false); 
} 


public class ViewHolderForAd extends RecyclerView.ViewHolder { 
     private ImageView ivStory; 
     TextView tvName; 

    public ViewHolderForAd(View view) { 
     super(view); 
     ivStory = (ImageView) view.findViewById(R.id.ivStoryImage); 
     tvName = (TextView) view.findViewById(R.id.tvAppName); 
     view.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       int pos = getAdapterPosition(); 
       if (pos < 0) { 
        pos = (int) v.getTag(); 
       } 
       customItemClickListener.onItemClicked(v, pos); 
      } 
     }); 

     //ivStory.startAnimation(AnimationUtils.loadAnimation(context, R.anim.pulse_story)); 
     ivStory.setTag(false); //Set default tag false to decrease risk of null 
    } 
} 

@Override 
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { 
//...Your code... 
if (!(boolean) holder1.ivStory.getTag()) { 
    holder1.ivStory.setTag(true); 
    holder1.ivStory.startAnimation(AnimationUtils.loadAnimation(context, R.anim.pulse_story)); 
} 
//...Your code...// 
} 

您可以使用setTag(键,对象),而不是setTag(对象),如果你已经被标记在您的ImageView的东西(如位置)。 希望这可以帮助别人。

相关问题