我們知道屬性動畫要設(shè)置get、set 方法丁眼,但是有時不好設(shè)置,因此我們找新方法昭殉。
/**
* 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;
}
}
}
使用方式:
?????? 將隱藏顯示的內(nèi)容放在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();
}
});
啟動動畫的時候可以實(shí)例化OffsetAnimation對象m乾蓬,將LinearLayout和height傳入惠啄;調(diào)用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;
大家可以試下死嗦,效果還可以趋距,有問題大家可以留言下,相互學(xué)習(xí)越除。本文借鑒《Android開發(fā)藝術(shù)探索》