2

Facebook アプリのようなスライド メニュー バーを実装したかったので、次のgithub の例を使用して実装しました。

すべてのアプリ画面にレイアウトを追加しています。私の問題は次のとおりです。

  1. アプリを開きます。
  2. メニューを開くアイコンをクリックします
  3. メニューを開いている間にアプリが読み込まれると、メニューが自動的に閉じます。
  4. メニューを開くアイコンをクリックすると、メニューが踊ります。
  5. これは、メニューが開いているときに追加がロードされた場合にのみ発生します。

ここに私の典型的なレイアウトファイルがあります

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/Fill" >

<FrameLayout
    android:id="@+id/FL_home"
    style="@style/Fill"
    android:layout_above="@id/adView" >

    <include layout="@layout/app_com_menu" />

    <LinearLayout
        android:id="@+id/LL_app"
        style="@style/Fill.RL"
        android:orientation="vertical" >

        <include layout="@layout/app_com_title" />

        <ListView
            style="@style/FillWrap.List" />

        <include layout="@layout/network_error" />
    <include layout="@layout/error_no_live"/>
    </LinearLayout>
</FrameLayout>

<include layout="@layout/ad_layout" />

私の ad_layout ファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<com.google.ads.AdView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/adView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="xxxxxxxxxxxx"
ads:loadAdOnCreate="true"
android:visibility="gone" />

そして、これがスライド式引き出しの主なロジックです

class AppMenuListener implements OnClickListener {
    public void onClick(View v) {
        doAnimation();
    }
}

class AppMenuCloseListener implements OnClickListener {
    public void onClick(View v) {
        if (menuOut) {
            doAnimation();
        }
    }
}

private void doAnimation() {
    AppBase me = AppBase.this;
    Animation animation = null;

    int width = appPage.getMeasuredWidth();
    int height = appPage.getMeasuredHeight();
    int left = (int) (appPage.getMeasuredWidth() * 0.67);
    if (menuOut) {
        if (appMenu.getVisibility() == View.VISIBLE) {
            animation = new TranslateAnimation(0, -left, 0, 0);
            animation.setDuration(300);
            animParams.set(0, 0, width, height);
        }
    } else {
        if (appMenu.getVisibility() == View.INVISIBLE) {
            animation = new TranslateAnimation(0, left, 0, 0);
            appMenu.setVisibility(View.VISIBLE);
            animParams.set(left, 0, left + width, height);
            animation.setDuration(400);
        }
    }

    animation.setAnimationListener(me);
    animation.setFillEnabled(true);
    appPage.startAnimation(animation);
}

public void onAnimationEnd(Animation animation) {
    menuOut = !menuOut;
    if (!menuOut) {
        appMenu.setVisibility(View.INVISIBLE);
    }
    appPage.layout(animParams.left, animParams.top, animParams.right,
            animParams.bottom);
}

public void onAnimationRepeat(Animation animation) {
}

public void onAnimationStart(Animation animation) {
}

static class AnimParams {
    int left, right, top, bottom;

    void set(int left, int top, int right, int bottom) {
        this.left = left;
        this.top = top;
        this.right = right;
        this.bottom = bottom;
    }
}

メニューが表示されていない場合、adListener を使用して広告の読み込みを停止しようとしましたが、うまくいきませんでした。

誰かが私が違うことができることを提案できますか?

4

0 に答える 0