您的位置:首页 > 移动开发 > Android开发

给Android ListView添加删除item动画

2016-05-12 21:14 519 查看
给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:属性动画

public static AnimatorSet buildListRemoveAnimator(final View view, final List list,  

            final MyAnimListAdapter adapter, final int index) {  

        AnimatorListener al = new AnimatorListener() {  

  

            @Override  

            public void onAnimationStart(Animator animation) {  

                // TODO Auto-generated method stub  

  

            }  

  

            @Override  

            public void onAnimationRepeat(Animator animation) {  

                // TODO Auto-generated method stub  

  

            }  

  

            @Override  

            public void onAnimationEnd(Animator animation) {  

                // TODO Auto-generated method stub  

                list.remove(index);  

                ViewHolder vh = (ViewHolder) view.getTag();  

                vh.needInflate = true;  

  

                adapter.notifyDataSetChanged();  

            }  

  

            @Override  

            public void onAnimationCancel(Animator animation) {  

                // TODO Auto-generated method stub  

  

            }  

        };  

  

        AnimatorSet animatorSet = new AnimatorSet();  

        Animator anim = ObjectAnimator.ofFloat(view, "rotationX", 0, 90);  

        Animator animb = ObjectAnimator.ofFloat(view, "alpha", 1, 0);  

        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);  

        final int height = view.getMeasuredHeight();  

        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  

  

            @Override  

            public void onAnimationUpdate(ValueAnimator animation) {  

                // TODO Auto-generated method stub  

                if (animation.getAnimatedFraction() >= 1) {  

                    view.setVisibility(View.GONE);  

                }  

                else {  

                    view.getLayoutParams().height = height  

                            - (int) (height * animation.getAnimatedFraction());  

                    view.requestLayout();  

                }  

            }  

        });  

  

        anim.setDuration(ANIMATION_DURATION);  

        animb.setDuration(ANIMATION_DURATION);  

        valueAnimator.setDuration(ANIMATION_DURATION + ANIMATION_DURATION + 100);  

        animatorSet.playTogether(anim, animb, valueAnimator);  

        animatorSet.addListener(al);  

        return animatorSet;  

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: