我曾經做過這樣的事情。當我使用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;
}
}
你可以修改它以符合你的情況。