我想给用户一个提示,他们可以使用滑动来删除某个项目,所以我正在尝试对新项目实施部分滑动。我将使用ItemTouchHelper.startswipe,但是我需要项目视图持有者。
我的问题是,当我将一个项目添加到我的RV并调用notifyItemInserted()时,如何获取新添加项目的视图?我试过recyclerView.findViewHolderForAdapterPosition(pos)
,每次都返回null。如果有人有任何信息,我会很感激
答案 0 :(得分:0)
我做过这样的事情。当我使用ItemTouchHelper
设置滑动时,我用简单的动画实现了动画。这就是我做到的。动画:
private void setupAnimation() {
swipeAnimation = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int direction = animationRepeatTime < 2 ? 1 : -1;
if (animatingView != null) {
animatingView.setTranslationX(direction * interpolatedTime * Utils.convertDpToPixel(100, context));
} else {
swipeAnimation.cancel();
}
}
};
swipeAnimation.setInterpolator(new OvershootInterpolator());
swipeAnimation.setRepeatMode(Animation.REVERSE);
swipeAnimation.setRepeatCount(3);
swipeAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
animationRepeatTime++;
}
});
swipeAnimation.setStartOffset(600);
swipeAnimation.setFillAfter(false);
swipeAnimation.setDuration(500);
}
在onBindViewHolder中,当触摸项目时停止动画:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (holder instanceof ActivityStreamViewHolder) {
bindActivityHolder((ActivityStreamViewHolder) holder, position);
if (position == 1 && shouldAnimate) {
startAnimation(holder.itemView);
}
holder.itemView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (swipeAnimation != null && swipeAnimation.hasStarted() && !swipeAnimation.hasEnded()) {
shouldAnimate = false;
swipeAnimation.cancel();
animatingView.clearAnimation();
animatingView.setTranslationX(0);
}
}
return false;
}
});
}
开始动画:
public void startAnimation(View view) {
animatingView = view;
if (shouldAnimate && getItemCount() > 1 && animatingView.getAnimation() == null) {
animatingView.startAnimation(swipeAnimation);
shouldAnimate = false;
}
}
您可以修改它以符合您的情况。