這個問題比較好玩,首先放上影片改變控制元件長寬的方法,比較簡單,因為得通過LayoutParams設定寬高,所以說不能使用ObjectAnimator,
private void animOut() {
ValueAnimator animator = ValueAnimator.ofInt(0, ScreenUtil.dip2px(25));
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
ViewGroup.LayoutParams params = getLayoutParams();
params.height = (int) animation.getAnimatedValue();
setLayoutParams(params);
}
});
animator.setDuration(400);
animator.start();
}
private void animIn() {
ValueAnimator animator = ValueAnimator.ofInt(ScreenUtil.dip2px(25), 0);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
ViewGroup.LayoutParams params = getLayoutParams();
params.height = (int) animation.getAnimatedValue();
setLayoutParams(params);
}
});
animator.setDuration(400);
animator.start();
}
因為我是直接重寫TextView,所以就沒有tvXx.getLayoutParams了,
然后需要顯示的話animOut() ;隱藏的話animIn()
先確定一件事,上面的代碼是正確的,可以使用的,當然假如你控制元件開始的時候是Gone就得先設定成VISIBLE,
失效的話,是隱藏的問題,它影片也會先進行,只是最后結果,卻是本來高度為0的控制元件,變成WRAP_CONTENT,或者被拉伸,依舊顯示在界面上,
碰到這種情況,比較偶然,當它的父布局是ConstraintLayout的時候就會最終控制元件無法隱藏,看到這里,有沒有恍然大悟的,
問題就出現在 ValueAnimator.ofInt(ScreenUtil.dip2px(25), 0) 這里,可以看出,最終控制元件的高度是0,在ConstraintLayout布局中,高度是0代表著有高度,受到它邊規則的影響,假如說他只有上面依賴于另一個控制元件,那他就是WRAP_CONTENT,假如上下都依賴了控制元件,他就會根據規則拉伸,
雖然沒在LinearLayout里嘗試,可以猜測,當設定了layout_weight屬性,使用上面的animIn()也會出現這種問題,
解決辦法,讓該控制元件父布局不是ConstraintLayout,就行了,界面我也不貼了,就是一個小問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/250711.html
標籤:其他
