0

FacebookのAndroidアプリと同じように、スライダーメニューを実装しようとしています。

メニューをスライドさせて元に戻すことに成功しました。

フレームレイアウトに収まる 2 つのビューがあります。
1.メインレイアウト(X)
2.メニューレイアウト(Y)

X を右にスライドさせて、Y をスライドさせ、スライドさせて X を 0 に戻し、メニューを非表示にします。

@Override
public void setContentView(int layout) {

    FrameLayout frame = new FrameLayout(getBaseContext());
    frame.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT));


    LayoutInflater inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    mainLayout = inflator.inflate(layout, null);

    menuList = inflator.inflate(R.layout.menu_page, null);


    fakeView= inflator.inflate(R.layout.fake_transparent_view, null);
    menuAnimator = new MenuAnimation(mainLayout,menuList,fakeView);
    frame.addView(menuList);
    frame.addView(mainLayout);
    frame.addView(fakeView);

    fakeView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(mainLayout.getLeft()>0)
            {

            menuAnimator.moveMenu("left");
            }

        }
    });

    super.setContentView(frame);


}





public void moveMenu(String direction) {
        int width=(int) (QuikrApplication.getWidth()*.85);
        if (direction.equals("right")) {
            this.direction="right";
            fakeView.setVisibility(View.VISIBLE);
            TranslateAnimation moveRight = new TranslateAnimation(0, width, 0, 0);
            moveRight.setDuration(500);
            parentLayout.setAnimation(moveRight);
            moveRight.setAnimationListener(animationListner);
            parentLayout.startAnimation(moveRight);
            fakeView.startAnimation(moveRight);
        }
        else if (direction.equals("left")){
            this.direction="left";

            TranslateAnimation moveLeft = new TranslateAnimation(0, -width, 0, 0);
            moveLeft.setDuration(500);
            parentLayout.setAnimation(moveLeft);
            moveLeft.setAnimationListener(animationListner);
            parentLayout.startAnimation(moveLeft);
            fakeView.startAnimation(moveLeft);
        }
    }

今問題は、メイン ビューで非同期に何らかのアクションを実行すると、メイン ビューが再配置されることです (メニューが表示されている場合)

4

3 に答える 3

1

LibSlideMenu と同様に、github には 280 以上のコミットがある別のプロジェクトがあり、これをいくつかのプロジェクトで使用しており、実装が非常に簡単で、チェックアウトできる機能がたくさんあります。

https://github.com/jfeinstein10/SlidingMenu

于 2013-02-03T10:50:35.423 に答える
0

私が何か提案することがあれば、github に facebook/google+ スタイルのスライダー メニューの非常に優れたライブラリ実装があります。

https://github.com/bk138/LibSlideMenu

私はそれを 1 つまたは 2 つのプロジェクトで使用しましたが、非常にうまく機能します。ぜひ試してみてください。

于 2013-02-02T09:12:54.300 に答える