我有一个布局为页面的viewpager。我试图删除单击deletebtn时带有动画的项目。如果页面没有滚动(活动只是用viewpager加载),它几乎可以工作。
如果页面已更改,则动画不会显示,但项目将照常移除。
请帮助我修复删除动画外观。
视图寻呼机适配器代码
@Override
public Object instantiateItem(ViewGroup collection, int position) {
LayoutInflater inflater = LayoutInflater.from(context);
ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.item_home_pager, collection, false);
ImageView deleteBtn = (ImageView) layout.findViewById(R.id.like_btn);
deleteBtn.setOnClickListener(v -> {
Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_to_top);
layout.startAnimation(animation);
removeItem(position);
});
collection.addView(layout);
return layout;
}
public void removeItem(int position) {
personModels.remove(position);
notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
return PagerAdapter.POSITION_NONE;
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
collection.removeView((View) view);
}
@Override
public int getCount() {
return personModels.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
最佳答案
我做了一些不同的事情,工作顺利。其思想是使用动画移除当前项(将其alpha设置为0),然后水平地将左侧或右侧项(使用动画)平移到现在不可见的项位置。动画完成后,我将执行实际的数据删除和notfyDataSetChanged()调用。
这个remove()方法放在viewpager的一个子类中
public void remove(int position, OnViewRemovedListener onViewRemovedListener) {
final int childCount = getChildCount();
if (childCount > 0) {
View toRemove = getChildAt(position);
int to = toRemove.getLeft();
final PagerAdapter adapter = getAdapter();
toRemove.animate()
.alpha(0)
.setDuration(getResources().getInteger(android.R.integer.config_shortAnimTime))
.setListener(new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
if (childCount == 1) {
if (onViewRemovedListener != null) onViewRemovedListener.onRemoved(position, -1);
if (adapter!= null) adapter.notifyDataSetChanged();
}
}
})
.start();
if (childCount > 1) {
int newPosition = position + 1 <= childCount - 1 ? position + 1 : position - 1;
View replacement = getChildAt(newPosition);
int from = replacement.getLeft();
replacement.animate()
.setInterpolator(new DecelerateInterpolator())
.setDuration(getResources().getInteger(android.R.integer.config_mediumAnimTime))
.translationX(to - from)
.setListener(new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
if (onViewRemovedListener != null) onViewRemovedListener.onRemoved(position, newPosition);
if (adapter!= null) adapter.notifyDataSetChanged();
}
})
.start();
}
}
}
public interface OnViewRemovedListener {
void onRemoved(int position, int newPosition);
}
关于android - Android ViewPager删除带动画的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44865698/