RecyclerView
新しい を使用して、アイテムの削除ItemAnimator
とは異なるアニメーションを使用しようとしています。DefaultItemAnimator
デフォルトのものはうまく機能しますが、私のものを使用すると、削除されたアイテムがRecyclerView
背景に「刻印」されたままになり、アニメーションやその他のアイテムがその上に描画されます。
ここに私のオーバーライドがありますItemAnimator
:
public static class ItemAnimator extends RecyclerView.ItemAnimator
{
private Activity mActivity;
private final List<ViewHolder> mPendingRemovals = new ArrayList<ViewHolder>();
private final List<ViewHolder> mRunningRemovals = new ArrayList<ViewHolder>();
public ItemAnimator(Activity activity)
{
super();
mActivity = activity;
}
@Override
public void runPendingAnimations()
{
for (final ViewHolder viewHolder : mPendingRemovals)
{
Animation animation = AnimationUtils.loadAnimation(mActivity, android.R.anim.slide_out_right);
animation.setAnimationListener(new Animation.AnimationListener()
{
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation)
{
mRunningRemovals.remove(viewHolder);
dispatchRemoveFinished(viewHolder);
}
@Override
public void onAnimationRepeat(Animation animation) { }
});
viewHolder.itemView.startAnimation(animation);
mRunningRemovals.add(viewHolder);
}
mPendingRemovals.clear();
}
@Override
public boolean animateRemove(RecyclerView.ViewHolder viewHolder)
{
mPendingRemovals.add((ViewHolder) viewHolder);
return true;
}
@Override
public boolean animateAdd(RecyclerView.ViewHolder viewHolder)
{
return false;
}
@Override
public boolean animateMove(RecyclerView.ViewHolder viewHolder, int i, int i2, int i3, int i4) { return false; }
@Override
public void endAnimation(RecyclerView.ViewHolder viewHolder)
{
((ViewHolder)viewHolder).itemView.clearAnimation();
mRunningRemovals.remove(viewHolder);
}
@Override
public void endAnimations()
{
for (ViewHolder viewHolder : mRunningRemovals)
viewHolder.itemView.clearAnimation();
mRunningRemovals.clear();
}
@Override
public boolean isRunning()
{
return mRunningRemovals.size() > 0;
}
}
Android L のドキュメントによると、必要なすべてのメソッドを実装し、適切な呼び出しを行ったと思われるため、エラーが何であるかはわかりません。