Java 如何创建带有突出部分的下拉菜单(RelativeLayout)?
我正试着给一个相对主义者制作动画。我想让它从屏幕底部滑入 但是在我的实现中,RelativeLayout的大部分内容都丢失了 图片中有更多细节: 请帮忙 代码: activity_main.xml: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
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();
}