android - ScrollView android时,项目动画在recyclerview中停止

标签 android animation android-recyclerview

我有一个 Recyclerview,我正在为单个列表项内的 View 设置动画,但是当我滚动 recyclerview 时,动画停止了。这是因为 recyclerview 从它的 View 中删除了项目,所以当我们向后滚动时它会取回它!但是现在我希望该动画继续播放,因为只有当我从服务器获取数据时我才会停止它!

我想要的只是我在 recyclerview 内的各个项目中启动的动画不应该停止,即使滚动 recyclerview 并且 View 失去焦点并重新聚焦!我需要在获取服务器数据时停止代码中的动画!我有停止动画的代码,如果项目没有从 View 中滚动,它就可以工作!

btn.onClick -- this button is the onClick for the recyclerview list item 1 btn.startAnimation(anim.xml) -- starting the animation

onSuccess -- server returns success btn.clearAnimation();

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

求助!

最佳答案

受 crymson 回答的启发,我使用 View 的标记方法而不是在您的自定义适配器的复杂逻辑中设置 bool 值,做出了一些简单而有用的解决方案。

@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...//
}

如果您已经在 imageView 中标记了某些东西(如位置),则可以使用 setTag(key, object) 而不是 setTag(object)。 希望这对某人有帮助。

关于android - ScrollView android时,项目动画在recyclerview中停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982262/

相关文章:

android - 从布局中移除子项

iphone - Windows Phone 7 UI (Metro) 可以在 iOS 上使用吗?

javascript - for 循环动画的导航控件

angular - 使用@HostBindings 代替 angular 4 中的主机

android - 无法启动 Activity ComponentInfo,仅来自 android N 的错误

android - 为什么每当我翻阅我的应用程序 viewPager 时,我的 fragment onCreate 都会被广泛调用?

java - 在 RecyclerView 的单个界面中使用多个 onClick 方法

java - Android - 为什么我们应该使用 adapter.notifydatasetChanged() 方法?

Android 在 ImageView 中删除背景属性

android - Actionbarsherlock - 更改操作栏线条颜色