2016-12-01 85 views
0

我想给用户一个提示,他们可以使用刷卡删除某个项目,所以我试图在新项目上实现部分刷卡。我将使用ItemTouchHelper.startswipe为此,但我需要项目视图持有人。获取新添加项目的视图

我的问题是,当我添加一个项目到我的房车并调用notifyItemInserted()时,我如何获得新添加的项目的视图?我试过每次都会返回null的recyclerView.findViewHolderForAdapterPosition(pos)。如果有人有任何信息,我会很感激它

回答

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; 
    } 
} 

你可以修改它以符合你的情况。

相关问题