2013-10-06 39 views
1

我有一个Android开关,当它打开时,在它下面展开一个LinearLayout。为此,我使用动画。当我启动屏幕时,按钮关闭,但显示LinearLayout。当我现在打开开关,然后再次退出时,它确实隐藏了LinearLayout,但正如我所说的,无论何时开始屏幕,默认显示LinearLayout。有人知道在屏幕启动时如何默认隐藏LinearLayout吗?如何在onCreate中隐藏Android LinearLayout?

我现在的代码如下:

public class MyClass extends Activity implements OnCheckedChangeListener { 
    Switch mySwitch; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_layout); 

     mySwitch = (Switch) findViewById(R.id.my_switch); 
     mySwitch.setOnCheckedChangeListener(this); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked){ 
      LinearLayout view = (LinearLayout) findViewById(R.id.view_to_expand); 
      Animation anim = expand(view, true); 
      view.startAnimation(anim); 
     } 
     else { 
      LinearLayout view = (LinearLayout) findViewById(R.id.view_to_expand); 
      Animation anim = expand(view, false); 
      view.startAnimation(anim); 
     } 
    } 

    public static Animation expand(final View v, final boolean expand) { 
     try { 
      Method m = v.getClass().getDeclaredMethod("onMeasure", int.class, int.class); 
      m.setAccessible(true); 
      m.invoke(v, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(((View) v.getParent()).getMeasuredWidth(), MeasureSpec.AT_MOST)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     final int initialHeight = v.getMeasuredHeight(); 
     if (expand) { 
      v.getLayoutParams().height = 0; 
     } else { 
      v.getLayoutParams().height = initialHeight; 
     } 
     v.setVisibility(View.VISIBLE); 
     Animation a = new Animation() { 
      @Override 
      protected void applyTransformation(float interpolatedTime, 
        Transformation t) { 
       int newHeight = 0; 
       if (expand) { 
        newHeight = (int) (initialHeight * interpolatedTime); 
       } else { 
        newHeight = (int) (initialHeight * (1 - interpolatedTime)); 
       } 
       v.getLayoutParams().height = newHeight; 
       v.requestLayout(); 
       if (interpolatedTime == 1 && !expand) 
        v.setVisibility(View.GONE); 
      } 

      @Override 
      public boolean willChangeBounds() { 
       return true; 
      } 
     }; 
     a.setDuration(250); 
     return a; 
    } 
} 
+0

请出示布局XML。 LL最初的可见性状态是什么? – Simon

+1

为什么不在XML中指定'layout_height'为0,并且'visibility'为'gone'? –

回答

2

,你可以尝试使用ViewSwitcher。将它添加到一个xml布局,并添加您的LinearLayout和一个空的布局。您的应用程序启动时,可以用空的布局开始,然后切换到另一个

<ViewSwitcher xmlns:android = "http://schemas.android.com/apk/res/android" 
    android:id="@+id/layoutSwitcher" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout></LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="6dip" > 

     <ImageView.... 
    </<LinearLayout> 
</ViewSwitcher> 

然后在代码

switcher = (ViewSwitcher) findViewById(R.id.layoutSwitcher); 
switcher.showNext();