分享一个Android Expand Collapse的动画

来源:互联网 发布:psp值得玩的游戏知乎 编辑:程序博客网 时间:2024/05/22 10:38

通过Animation实现:

public class ExpandCollapseAnimation extends Animation {private View mAnimatedView;private int mEndHeight;private int mType;public final static int COLLAPSE = 1;public final static int EXPAND = 0;private LinearLayout.LayoutParams mLayoutParams;/** * Initializes expand collapse animation, has two types, collapse (1) and expand (0). * @param view The view to animate * @param type The type of animation: 0 will expand from gone and 0 size to visible and layout size defined in xml. * 1 will collapse view and set to gone */public ExpandCollapseAnimation(View view, int type) {mAnimatedView = view;mEndHeight = mAnimatedView.getMeasuredHeight();mLayoutParams = ((LinearLayout.LayoutParams) view.getLayoutParams());mType = type;if(mType == EXPAND) {mLayoutParams.bottomMargin = -mEndHeight;} else {mLayoutParams.bottomMargin = 0;}view.setVisibility(View.VISIBLE);}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {super.applyTransformation(interpolatedTime, t);if (interpolatedTime < 1.0f) {if(mType == EXPAND) {mLayoutParams.bottomMargin =  -mEndHeight + (int) (mEndHeight * interpolatedTime);} else {mLayoutParams.bottomMargin = - (int) (mEndHeight * interpolatedTime);}Log.d("ExpandCollapseAnimation", "anim height " + mLayoutParams.bottomMargin);mAnimatedView.requestLayout();} else {if(mType == EXPAND) {mLayoutParams.bottomMargin = 0;mAnimatedView.requestLayout();} else {mLayoutParams.bottomMargin = -mEndHeight;mAnimatedView.setVisibility(View.GONE);mAnimatedView.requestLayout();}}}}

第一种方式详细请看:https://github.com/tjerkw/Android-SlideExpandableListView

第二种方式是自己通过Animator实现也行:

public class ExpandCollapseAnimation {public static ValueAnimator ExpandAnimation(final View view, int start,final int end) {ValueAnimator animator = ValueAnimator.ofInt(start, end);animator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator arg0) {// TODO Auto-generated method stub//通过更改height也可以,但是有些os不行,还不知道什么原因LinearLayout.LayoutParams params = (LayoutParams) view.getLayoutParams();params.bottomMargin = (int) arg0.getAnimatedValue() - end;view.requestLayout();}});animator.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator arg0) {// TODO Auto-generated method stubview.setVisibility(View.VISIBLE);}@Overridepublic void onAnimationRepeat(Animator arg0) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animator arg0) {// TODO Auto-generated method stub}@Overridepublic void onAnimationCancel(Animator arg0) {// TODO Auto-generated method stub}});return animator;}public static ValueAnimator CollapseAnimation(final View view, final int start,int end) {ValueAnimator animator = ValueAnimator.ofInt(start, end);animator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator arg0) {// TODO Auto-generated method stubLinearLayout.LayoutParams params = (LayoutParams) view.getLayoutParams();params.bottomMargin = (int) arg0.getAnimatedValue() - start;view.requestLayout();}});animator.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator arg0) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animator arg0) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animator arg0) {// TODO Auto-generated method stubview.setVisibility(View.GONE);}@Overridepublic void onAnimationCancel(Animator arg0) {// TODO Auto-generated method stub}});return animator;}}



0 0
原创粉丝点击