我正在使用RecyclerView,并有一些动画,我可以在ViewHolder项目中放大一个相对布局。
注意:它不是添加/删除/插入动画。当用户在 ViewHolder 项中交互时,它将启动。因此,我在这里没有使用ItemAnimator。
动画工作正常,但它会在某个随机视图项中重新出现(最终状态)。我知道这是由于物品的重复使用,我也在清除动画,但这没有帮助。
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
Model model = getModelObject(position);
((Model) viewHolder.itemView).showItem(position);
}
我在节目里做这个
relativeLayout.clearAnimation();
relativeLayout.setAnimation(null);
在onViewDetachedFromWindow中
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
((ItemView) holder.itemView).clearAllAnimations();
super.onViewDetachedFromWindow(holder);
}
透明化
public void clearAllAnimations() {
for (RelativeLayout layout : layoutArray) {
optionLayout.clearAnimation();
html" target="_blank">optionLayout.setAnimation(null);
}
下面是我如何设置视图动画的
public AnimatorSet onDragStartAnimation(RelativeLayout group[]) {
AnimatorSet big = new AnimatorSet();
for (RelativeLayout relativeLayout : group) {
ObjectAnimator scaleXSmall = ObjectAnimator.ofFloat(relativeLayout, "scaleX", 1.0f, 0.85f);
ObjectAnimator scaleYSmall = ObjectAnimator.ofFloat(relativeLayout, "scaleY", 1.0f, 0.85f);
big.playTogether(scaleXSmall, scaleYSmall);
}
return big;
}
它不起作用。RelativeLayout没有重置,并且在一些随机视图项目中以scaledup状态出现。
更新
我做了一个小实验:在ViewHolder项目中的ImageView上设置alpha动画,如下所示
Animation fadeInAnimation = AnimationUtils.loadAnimation(mContext, R.anim.fadein);
imageView.startAnimation(fadeInAnimation);
并使用了清晰的动画。imageView.clearAnimation();它工作和ImageView是可见正常时,下一次ViewItem出现在屏幕上。
但如果我这么做就不管用了
alphaAnimator = ObjectAnimator.ofFloat(centerImageView, "alpha", 1.0f, 0.5f);
alphaAnimator.start();
为了清除这个
alphaAnimator.removeAllListeners();
alphaAnimator.cancel();
alphaAnimator.end();
这不起作用。Alpha动画保留在ViewHolder图像项中。
我通过在onViewDetachedFromWindow中对所有动画师进行反向动画来解决这个问题。
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
if (holder.getItemViewType() == 1) ((MyItemView) holder.itemView).reverseAllAnimations();
}
通过从crymson的答案中得到启发,我使用视图的标记方法,而不是在自定义适配器的复杂逻辑中设置一个布尔值,做出了一个简单而有用的解决方案。
@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)。希望这对某人有所帮助。
我用这种方法解决了这个问题。一切正常。
GroupsViewHolder -它是自定义的RecyclerView。取景器
@Override
public void onViewAttachedToWindow(GroupsViewHolder holder) {
super.onViewAttachedToWindow(holder);
//here add animation
}
@Override
public void onViewDetachedFromWindow(GroupsViewHolder holder) {
//here clear animation
super.onViewDetachedFromWindow(holder);
}
在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:
新手在这里。当长时间按下卡片(列表项)时,我很难在单个列表项上实现动画。当我长按一张卡片时,所有卡片都会动画化。有人可以解释为什么只有当回收器View的水平滚动被我禁用时才会发生此问题。 主要活动: 回收器视图适配器:
我有一个如下定义的表视图 当用户单击时,我使用单击的项目详细信息重新加载表。在我重新加载之前,我对表项调用清除 现在,当我单击另一个项目并尝试重新加载表格时,它看起来像下面这样。这是非常奇怪的,因为应该只有一行,但行的大小是一样的,就像从以前的点击,其余的行是空的,除了图标。当我点击图标时,没有任何反应。任何人以前都面临过这种情况。有人知道这是什么原因吗? 我的工具定义如下。它们只是2 的
我已经在我的listView中实现了ViewHolder和ConvertView。我的listView由一个自定义适配器填充,其中包含一个预订列表。当我单击一个项目时,一个不可见的布局从右向左滑动,以显示按钮。我可以通过单击一个关闭按钮来关闭这个覆盖布局,以便它再次被隐藏。在这个覆盖布局上,我有一个删除按钮,它使我能够删除该项目。到目前为止一切都很好。当我擦除一个项目时,该项目会按预期消失,然后重
当我在回收器视图中选择一个项目时,会自动选择多个项目 我正在做的是 我只想获取没有重复的联系人,并在recyclerview中列出所有联系人,并使两个文本视图可见(一个用于数字,第二个用于名称)。完成了,但问题是 当我点击一个项目时,它会被点击4次(例如,如果我点击一个项目,它会显示两个文本视图,但具有相同名称和编号的相同项目会显示出来,就像我点击了4个项目并看到图片一样) 适配器类 在那里我得到
我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件