5

アプリケーションにFacebookのようなメニューが必要です。これには多くのスレッドがあり、それらはすべて、実際に画面のスクリーンショットを撮り、その画像を右にスライドさせて左側にメニューを表示し、画像をスライドさせてトランジションを設定するライブラリを使用することを提案しています。ただし、その場合、右側のレイアウトは画像であるためクリックできません。

しかし、メニューレイアウトとコンテンツレイアウトがすでにあるルートレイアウトを使用する別の方法があります。ただし、ルートレイアウトは左に向かって負のマージンが設定されているため、表示されません。このような-

メニューが押されていないときのコンテンツ

ユーザーがメニューボタンを押すと、メニューレイアウトが右にスライドし、ルートレイアウトの左マージンが0に設定されます。これで、次のように表示されます。

メニューを押してメニューレイアウトを表示したときの内容

さて、本当の問題はここから始まります

両方のレイアウトをアニメーションでスライドさせたいです。そのため、メニューレイアウトとコンテンツレイアウトをアニメーション化すると、同じアニメーションを適用しても、両方のレイアウトのアニメーションの速度が同じになりません。そこで、マージンを設定して、ROOTLAYOUTを右/左にのみシフトしようとしました。ただし、そうすると、画面に何も表示されません。私はどこが間違っているのですか。マージンを設定する方法をここに示します-

int width = leftLayout.getWidth();
isLayoutShown = !isLayoutShown;
if(isLayoutShown){
    rootLayoutParams.setMargins(0, 0, 0, 0);
    rootLayout.setLayoutParams(rootLayoutParams);    
}else{
    rootLayoutParams.setMargins(-width, 0, 0, 0);
    rootLayout.setLayoutParams(rootLayoutParams);
}
4

1 に答える 1

4

やっと何とかできるようになりました。左上隅のメニューボタンをクリックしたときに使用されるコードは次のとおりです。

@Override
public void onClick(View v) {
rootLayoutParams = new LayoutParams(rightLayout.getWidth(),
    rightLayout.getHeight());

if (lhsMenu.getVisibility() == View.GONE) {
    lhsMenu.setVisibility(View.VISIBLE);
    Animation slideRight = setRightSlidingAnimation();
    rightLayout.setAnimation(slideRight);
    lhsMenu.setAnimation(slideRight);
} else {
    Animation slideLeft = setLeftSlidingAnimation();
    rightLayout.setAnimation(slideLeft);
    lhsMenu.setAnimation(slideLeft);
    lhsMenu.setVisibility(View.GONE);
    }
}

更新:rightLayout rightLayout が縮小しないように、margin を左右 (必要な場合) に設定します。

_rightLayoutParams.setMargins(width, 0, -width, 0);

私の場合はどこwidth = 200

于 2012-07-10T06:03:13.303 に答える