我将viewpager的布局作为page.I尝试删除deleteBtn上带动画的项目。如果页面没有滚动(活动刚刚加载了viewpager),它几乎可以工作。 如果页面被更改,动画不会出现,但项目会像往常一样删除。 请帮我修复删除时的动画外观。
代码寻呼机适配器
body{
height:100%;
}
答案 0 :(得分:1)
我做了一些与众不同的事情,使工作顺利。想法是删除带有动画的当前项目(将其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);
}