Android属性动画实现View隐藏显示

我们知道属性动画要设置get、set 方法,但是有时不好设置,因此我们找新方法。

/**

* Created by gongdongdong on 2017/1/16.

*/

public class OffsetAnimation {

private LinearLayout mOffsetll;

private int mHeight;

public OffsetAnimation(LinearLayout mOffsetll, int height) {

this.mOffsetll = mOffsetll;

mHeight = height;

}

public void startShowAnimate() {

ViewWrapper wrapper = new ViewWrapper(mOffsetll);

ObjectAnimator.ofInt(wrapper, "bottomMargin", mHeight).setDuration(500).start();

}

public void startHideAnimate() {

ViewWrapper wrapper = new ViewWrapper(mOffsetll);

ObjectAnimator.ofInt(wrapper, "bottomMargin", 0).setDuration(500).start();

}

public class ViewWrapper {

private LinearLayout ll;

public int getBottomMargin() {

return ll.getLayoutParams().height;

}

public void setBottomMargin(int bottomMargin) {

ll.getLayoutParams().height = bottomMargin;

ll.requestLayout();

}

public ViewWrapper(LinearLayout view) {

this.ll = view;

}

}

}

使用方式:

       将隐藏显示的内容放在LinearLayout中,启动的时候测量出LinearLayout的高度height(这里你可以onCreate获取高度,可以使用measure、ViewTreeObserver、post三种方式中的一种),这里我使用ViewTreeObserver,如下:

ViewTreeObserver vto=mInsuranceTv.getViewTreeObserver();

vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

mInsuranceTv.getViewTreeObserver().removeGlobalOnLayoutListener(this);

height=mInsuranceTv.getMeasuredHeight();

}

});

启动动画的时候可以实例化OffsetAnimation对象m,将LinearLayout和height传入;调用m.startShowAnimate()显示、m.startHideAnimate()隐藏。如果想隐藏有动画效果的View,可以在onCreate里做如下处理。

mInsuranceTv= (TextView) findViewById(R.id.insurance_tv); //TextView要隐藏显示的view

LinearLayout.LayoutParams  mLayoutParams = ((LinearLayout.LayoutParams) mInsuranceTv2.getLayoutParams());

mLayoutParams.bottomMargin=-height;


大家可以试下,效果还可以,有问题大家可以留言下,相互学习。本文借鉴《Android开发艺术探索》

你可能感兴趣的:(Android属性动画实现View隐藏显示)