私のアプリケーションでは、ボタンをクリックすると上から移動するメニューがあります。そのメニューは LinearLayout にネストされています
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background"
android:orientation="vertical">
<!-- Top Menu -->
<LinearLayout
android:id="@+id/top_menu"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:orientation="vertical">
<The 3 Menu Buttons as ImageButton>
</LinearLayout>
<!-- End of Top Menu -->
...[Rest of Layout / the always visible content
</LinearLayout>
アクティビティが次のように作成されたときに、メニューを非表示にする必要があります。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_someactivity);
animHelp = new AnimationHelper(getWindow().getDecorView().getRootView());
// Not really working temporary fix for the Animation 'moveup thingy' that happens the first time (view.gone/view.visible issue)
animHelp.doSlideUp(0); // int param = animation.setDuration(0);
問題:アクティビティが開始すると、アニメーションが発生する/コンテンツ部分が上に移動するのが見えます
質問: アニメーションが表示されないように top_menu を非表示にするにはどうすればよいですか?
試行: - Visibility:Gone を開始パラメーターとして使用しても、問題は解決しません。
完全を期すために、ここに AnimationHelper.class があります
public class AnimationHelper {
private boolean isDown = false;
private LinearLayout ll;
private LinearLayout menu;
public AnimationHelper(View v) {
ll = (LinearLayout)v.findViewById(R.id.root);
menu = (LinearLayout) v.findViewById(R.id.top_menu);
}
public void doSlideDown(int time) {
menu.setVisibility(View.VISIBLE);
Animation slideDown = setLayoutAnim_slidedown(time);
ll.startAnimation(slideDown);
}
public void doSlideUp(int time) {
Animation slideUp = setLayoutAnim_slideup(time);
ll.startAnimation(slideUp);
}
private Animation setLayoutAnim_slidedown(int time) {
Animation animation = new TranslateAnimation(
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, -menu.getHeight(),
Animation.ABSOLUTE, 0);
animation.setDuration(time);
animation.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {}
public void onAnimationEnd(Animation animation) {
isDown = true;
}
public void onAnimationRepeat(Animation animation) {}
});
return animation;
}
private Animation setLayoutAnim_slideup(int time) {
Animation animation = new TranslateAnimation(
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, -menu.getHeight());
animation.setDuration(time);
animation.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {}
public void onAnimationEnd(Animation animation) {
ll.clearAnimation();
menu.setVisibility(View.GONE);
isDown = false;
}
public void onAnimationRepeat(Animation animation) {}
});
return animation;
}
public boolean isDown() {
return isDown;
}
}
お時間をいただきありがとうございました!