Android:ValueAnimatorアニメーションでコントロールの長さと幅を変更して失効する問題解決
この問題は面白いです.まずアニメーションを置いてコントロールの長さと幅を変える方法は簡単です.LayoutParamsで幅を設定しなければならないので、ObjectAnimatorは使えません.
私は直接TextViewを書き直したので、tvXxはありません.getLayoutParamsです.
そして表示が必要ならanimOut();隠すとanimIn()
まず、上のコードが正しいことを確認して、使用することができます.もちろん、コントロールが始まるときにGoneであれば、まずVISIBLEに設定しなければなりません.
失効すると隠し問題になり、アニメーションも先に行われますが、最後の結果、本来の高さ0のコントロールがWRAP_になりますCONTENT、または引き伸ばされても、界面に表示されます.
この場合、親レイアウトがConstraintLayoutの場合、最終的なコントロールは非表示になります.ここを見て、はっと悟ったことはありませんか.
問題はValueAnimatorですofInt(ScreenUtil.dip 2 px(25),0)ここでは,最終コントロールの高さが0であることが分かるが,ConstraintLayoutレイアウトでは,高さが0であることが高さを表し,その辺の規則の影響を受けている.CONTENTは、上下がコントロールに依存すると、ルールに従ってストレッチします.
LinearLayoutでは試していませんが、layoutが設定されていると推測できます.Weightプロパティでは、上記のanimIn()を使用してもこの問題が発生します.
解決策は、コントロールの親レイアウトがConstraintLayoutでないようにすればいいです.インタフェースも貼らないで、小さな問題です.
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.dip 2 px(25),0)ここでは,最終コントロールの高さが0であることが分かるが,ConstraintLayoutレイアウトでは,高さが0であることが高さを表し,その辺の規則の影響を受けている.CONTENTは、上下がコントロールに依存すると、ルールに従ってストレッチします.
LinearLayoutでは試していませんが、layoutが設定されていると推測できます.Weightプロパティでは、上記のanimIn()を使用してもこの問題が発生します.
解決策は、コントロールの親レイアウトがConstraintLayoutでないようにすればいいです.インタフェースも貼らないで、小さな問題です.