1

私のアプリケーションでは、ボタンをクリックすると上から移動するメニューがあります。そのメニューは LinearLayout にネストされています

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background"
android:orientation="vertical">

    <!-- Top Menu -->

    <LinearLayout
        android:id="@+id/top_menu"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:orientation="vertical">

        <The 3 Menu Buttons as ImageButton>
    </LinearLayout>

    <!-- End of Top Menu -->

    ...[Rest of Layout / the always visible content
</LinearLayout>

アクティビティが次のように作成されたときに、メニューを非表示にする必要があります。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_someactivity);        

    animHelp = new AnimationHelper(getWindow().getDecorView().getRootView());        
    // Not really working temporary fix for the Animation 'moveup thingy' that happens the first time (view.gone/view.visible issue)
    animHelp.doSlideUp(0); // int param = animation.setDuration(0);

問題:アクティビティが開始すると、アニメーションが発生する/コンテンツ部分が上に移動するのが見えます

質問: アニメーションが表示されないように top_menu を非表示にするにはどうすればよいですか?

試行: - Visibility:Gone を開始パラメーターとして使用しても、問題は解決しません。

完全を期すために、ここに AnimationHelper.class があります

public class AnimationHelper {

    private boolean isDown = false;

    private LinearLayout ll;
    private LinearLayout menu;

    public AnimationHelper(View v) {
        ll = (LinearLayout)v.findViewById(R.id.root);
        menu  = (LinearLayout) v.findViewById(R.id.top_menu);
    }

    public void doSlideDown(int time) {
        menu.setVisibility(View.VISIBLE);

        Animation slideDown = setLayoutAnim_slidedown(time);
        ll.startAnimation(slideDown);
    }

    public void doSlideUp(int time) {

         Animation slideUp = setLayoutAnim_slideup(time);
         ll.startAnimation(slideUp);
    }

    private Animation setLayoutAnim_slidedown(int time) {

         Animation animation = new TranslateAnimation(
                 Animation.ABSOLUTE, 0,
                 Animation.ABSOLUTE, 0,
                 Animation.ABSOLUTE, -menu.getHeight(),
                 Animation.ABSOLUTE, 0);

            animation.setDuration(time);
            animation.setAnimationListener(new AnimationListener() {

                public void onAnimationStart(Animation animation) {}

                public void onAnimationEnd(Animation animation) {
                    isDown = true;              
                }

                public void onAnimationRepeat(Animation animation) {}

            });

         return animation;

    }

    private Animation setLayoutAnim_slideup(int time) {

        Animation animation = new TranslateAnimation(
                Animation.ABSOLUTE, 0,
                Animation.ABSOLUTE, 0,
                Animation.ABSOLUTE, 0,
                Animation.ABSOLUTE, -menu.getHeight());

        animation.setDuration(time);
        animation.setAnimationListener(new AnimationListener() {        

            public void onAnimationStart(Animation animation) {}

            public void onAnimationEnd(Animation animation) {
                ll.clearAnimation();
                menu.setVisibility(View.GONE);
                isDown = false;

            }

            public void onAnimationRepeat(Animation animation) {}

         });

         return animation;
    }

    public boolean isDown() {
        return isDown;
    }

}

お時間をいただきありがとうございました!

4

0 に答える 0