给Android ListView添加删除item动画

给listview删除一个item的时候加上一个折叠动画,感觉效果会好一点。

步骤是当删除一个view,先用动画把view的高度改变,看上去就是折叠的效果。当动画完成的时候,再真正把item移除。

做法大概分为两种,补间动画、属性动画

1:补间动画

    private void deletePattern(final View view, final int position) {

        Animation.AnimationListener al = new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                mDBHelper.deleteCustomPattern(mPatternList.get(position));
                mPatternList.remove(position);
                mPatternAdapter.notifyDataSetChanged();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        };
        collapse(view, al);

    }

    private void collapse(final View view, Animation.AnimationListener al) {
        final int originHeight = view.getMeasuredHeight();

        Animation animation = new Animation() {
            @Override
            protected void applyTransformation(float interpolatedTime, Transformation t) {
                if (interpolatedTime == 1.0f) {
                    view.setVisibility(View.GONE);
                } else {
                    view.getLayoutParams().height = originHeight - (int) (originHeight * interpolatedTime);
                    view.requestLayout();
                }
            }

            @Override
            public boolean willChangeBounds() {
                return true;
            }
        };
        if (al != null) {
            animation.setAnimationListener(al);
        }
        animation.setDuration(300);
        view.startAnimation(animation);
    }

输入图片说明

2:属性动画

  1. public static AnimatorSet buildListRemoveAnimator(final View view, final List list,  
  2.             final MyAnimListAdapter adapter, final int index) {  
  3.         AnimatorListener al = new AnimatorListener() {  
  4.   
  5.             @Override  
  6.             public void onAnimationStart(Animator animation) {  
  7.                 // TODO Auto-generated method stub  
  8.   
  9.             }  
  10.   
  11.             @Override  
  12.             public void onAnimationRepeat(Animator animation) {  
  13.                 // TODO Auto-generated method stub  
  14.   
  15.             }  
  16.   
  17.             @Override  
  18.             public void onAnimationEnd(Animator animation) {  
  19.                 // TODO Auto-generated method stub  
  20.                 list.remove(index);  
  21.                 ViewHolder vh = (ViewHolder) view.getTag();  
  22.                 vh.needInflate = true;  
  23.   
  24.                 adapter.notifyDataSetChanged();  
  25.             }  
  26.   
  27.             @Override  
  28.             public void onAnimationCancel(Animator animation) {  
  29.                 // TODO Auto-generated method stub  
  30.   
  31.             }  
  32.         };  
  33.   
  34.         AnimatorSet animatorSet = new AnimatorSet();  
  35.         Animator anim = ObjectAnimator.ofFloat(view, "rotationX"090);  
  36.         Animator animb = ObjectAnimator.ofFloat(view, "alpha"10);  
  37.         ValueAnimator valueAnimator = ValueAnimator.ofFloat(01);  
  38.         final int height = view.getMeasuredHeight();  
  39.         valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
  40.   
  41.             @Override  
  42.             public void onAnimationUpdate(ValueAnimator animation) {  
  43.                 // TODO Auto-generated method stub  
  44.                 if (animation.getAnimatedFraction() >= 1) {  
  45.                     view.setVisibility(View.GONE);  
  46.                 }  
  47.                 else {  
  48.                     view.getLayoutParams().height = height  
  49.                             - (int) (height * animation.getAnimatedFraction());  
  50.                     view.requestLayout();  
  51.                 }  
  52.             }  
  53.         });  
  54.   
  55.         anim.setDuration(ANIMATION_DURATION);  
  56.         animb.setDuration(ANIMATION_DURATION);  
  57.         valueAnimator.setDuration(ANIMATION_DURATION + ANIMATION_DURATION + 100);  
  58.         animatorSet.playTogether(anim, animb, valueAnimator);  
  59.         animatorSet.addListener(al);  
  60.         return animatorSet;  
  61.     }  

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值