Java 如何创建带有突出部分的下拉菜单(RelativeLayout)?

Java 如何创建带有突出部分的下拉菜单(RelativeLayout)?,java,android,android-layout,android-animation,android-relativelayout,Java,Android,Android Layout,Android Animation,Android Relativelayout,我正试着给一个相对主义者制作动画。我想让它从屏幕底部滑入 但是在我的实现中,RelativeLayout的大部分内容都丢失了 图片中有更多细节: 请帮忙 代码: activity_main.xml: <RelativeLayout android:id="@+id/sMenu" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Imag

我正试着给一个相对主义者制作动画。我想让它从屏幕底部滑入

但是在我的实现中,RelativeLayout的大部分内容都丢失了

图片中有更多细节:

请帮忙

代码:

activity_main.xml:

<RelativeLayout
    android:id="@+id/sMenu"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     >

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#e3e3e3"
        />

</RelativeLayout>
上面的幻灯片:

public void SlideToAbove() {
Animation slide = null;
slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
        Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
        0.0f, Animation.RELATIVE_TO_SELF, -4.5f);

slide.setDuration(400);
slide.setFillAfter(true);
slide.setFillEnabled(true);
sMenu.startAnimation(slide);

slide.setAnimationListener(new Animation.AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }

    @Override
    public void onAnimationEnd(Animation animation) {

        sMenu.clearAnimation();

        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                sMenu.getWidth(), displayHeight - 122);
        lp.addRule(RelativeLayout.BELOW, id.topPanel);
        sMenu.setLayoutParams(lp);

    }
});
向下滑动:

public void SlideToDown() {
    Animation slide = null;
    slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
            Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
            0.0f, Animation.RELATIVE_TO_SELF, 5.2f);

    slide.setDuration(400);
    slide.setFillAfter(true);
    slide.setFillEnabled(true);
    sMenu.startAnimation(slide);

    slide.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {

            sMenu.clearAnimation();
            RelativeLayout.LayoutParams p2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
            p2.addRule(RelativeLayout.BELOW, id.smth);
            p2.setMargins(0, 200, 0, 0);
            sMenu.setLayoutParams(p2);
            sMenu.requestLayout();
        }
    });
}

在我看来,setMargins()方法中存在的问题。

噢,太简单了

public void SlideToAbove() {
    ((RelativeLayout) findViewById(id.sMenu)).setVisibility(LinearLayout.VISIBLE);

    ObjectAnimator mover = ObjectAnimator.ofFloat(sMenu, "translationY", deltaY, 0);
    mover.setDuration(animationDuration);
    mover.start();
}

public void SlideToDown() {
    ObjectAnimator mover = ObjectAnimator.ofFloat(sMenu, "translationY", 0, deltaY);
    mover.setDuration(animationDuration);
    mover.start();
}
public void SlideToAbove() {
    ((RelativeLayout) findViewById(id.sMenu)).setVisibility(LinearLayout.VISIBLE);

    ObjectAnimator mover = ObjectAnimator.ofFloat(sMenu, "translationY", deltaY, 0);
    mover.setDuration(animationDuration);
    mover.start();
}

public void SlideToDown() {
    ObjectAnimator mover = ObjectAnimator.ofFloat(sMenu, "translationY", 0, deltaY);
    mover.setDuration(animationDuration);
    mover.start();
}