2016-11-16 23 views
0

特定のチェックボックスがオンになっているときにビューを表示または非表示にする方法を2つ作成しました。 私は、チェックボックスとビューを初期化するInitメソッドと、チェックボックスのステータス変更リスナの中から呼び出されるトグルメソッドを持ち、ビューステータスをアニメーションで切り替えることができます。setTranslationYが正しく初期化されていません

void toggleViewVisibility(final boolean b, final View v) { 
    v.setAlpha(b ? 0.0f : 1.0f); 
    v.setTranslationY(b ? v.getHeight() : 0); 
    if (b) { 
     v.setVisibility(View.VISIBLE); 
     v.animate().alpha(1.0f).translationY(0).setDuration(400); 
    } else { 
     v.animate().alpha(0.0f).translationY(v.getHeight()).setDuration(400).setListener(new Animator.AnimatorListener() { 
      @Override public void onAnimationStart(Animator animator) {} 
      @Override public void onAnimationEnd(Animator animator) { v.setVisibility(View.GONE); } 
      @Override public void onAnimationCancel(Animator animator) {} 
      @Override public void onAnimationRepeat(Animator animator) {} 
     }); 
    } 
} 

void toggleViewVisibilityInit(final boolean b, final View v, final AnimateCheckBox c) { 
    v.setAlpha(b ? 1.0f : 0.0f); 
    v.setTranslationY(b ? 0 : v.getHeight()); 
    v.setVisibility(b ? View.VISIBLE : View.GONE); 
    c.setChecked(b); 
} 

それはアルファアニメーションと正常に動作しますが、彼らはまったく同じ方法で処理し、初期化されているが、翻訳アニメーションで小さな問題を抱えています。どうして?

特に、チェックボックスのステータスが変更されると、翻訳はうまく動作しますが、チェックボックスがオフになると、ビューは非表示になります.VERY FIRSTステータスの変更時にのみ、ビューはアルファアニメーションとともに表示されますが、 。 ビューが作成されたばかりのとき、変換ステータスは初期化されていないのに対し、アルファステータスはtoggleViewVisibilityInit()メソッドで行われているようです。

これがどうして起こるのか誰にも分かりませんか?ビューが作成されるとすぐに、翻訳が考慮されていないように見えます。

答えて

1

ビューが描画されていないため、高さが不明です(したがって0になります)。

これを知っていれば、解決策を探すのは簡単です(例: getWidth() and getHeight() of View returns 0

これが役に立ちます。

+0

ありがとうございます。私はそれのようなものを疑ったが、私はその点を見つけることができなかった。これは私を助けます。 –

関連する問題