2012-04-11 12 views
6

मैंने निम्नलिखित कोड के साथ लेआउट विस्तार एनीमेशन किया है। जब हम एक टेक्स्ट व्यू पर क्लिक करके एनीमेशन का आह्वान करते हैं तो यह ठीक काम करता है, लेकिन जब मैं लेआउट पर क्लिक करके ऐसा करने की कोशिश करता हूं तो वही नहीं होता है। क्या कोई इसे हल करने में मेरी मदद कर सकता है?लेआउट विस्तार एनीमेशन

LinearLayout hello= (LinearLayout)findViewById(R.id.lin_hello); 
final RelativeLayout rel=(RelativeLayout)findViewById(R.id.rel_nah_hide); 
hello.setOnClickListener(new OnClickListener() {   
    @Override 
    public void onClick(View v) { 
     expand=!expand; 
     Animation a=expand(rel, expand); 
     rel.setAnimation(a); 
     a.start(); 
    } 
}); 

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(SPEED_ANIMATION_TRANSITION); 
    a.setAnimationListener(new AnimationListener(){ 
     @Override 
     public void onAnimationEnd(Animation arg0) { 
      animWorkingFlag=false; 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onAnimationStart(Animation animation) { 
      animWorkingFlag=true; 
     } 
    }); 

    return a; 
} 

और निम्न, XML लेआउट है

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <LinearLayout 
     android:id="@+id/lin_hello" 
     android:layout_height="50dp" 
     android:layout_width="fill_parent" 
     android:orientation="vertical"> 
     <TextView 
      android:id="@+id/hello" 
      android:layout_height="50dp" 
      android:layout_width="fill_parent" 
      android:text="Nah" 
      android:gravity="center" 
      android:background="#F03535"/> 
    </LinearLayout> 

    <RelativeLayout 
     android:id="@+id/rel_nah_hide" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 
     <TextView 
      android:id="@+id/txt_nah_hide1" 
      android:layout_height="50dp" 
      android:layout_width="fill_parent" 
      android:text="Incorrect Name/Address" 
      android:gravity="center" 
      android:textColor="@color/white"/> 
     <TextView 
      android:id="@+id/txt_nah_hide2" 
      android:layout_height="50dp" 
      android:layout_width="fill_parent" 
      android:text="Venue is closed" 
      android:gravity="center" 
      android:textColor="@color/white" 
      android:layout_below="@id/txt_nah_hide1"/> 
     <TextView 
      android:id="@+id/txt_nah_hide3" 
      android:layout_height="50dp" 
      android:layout_width="fill_parent" 
      android:text="Venue is duplicate" 
      android:gravity="center" 
      android:textColor="@color/white" 
      android:layout_below="@id/txt_nah_hide2"/> 
    </RelativeLayout> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="28dp" 
     android:text="heelo2222"/> 
</LinearLayout> 
+0

आप भी मेरी समाधान के साथ की कोशिश कर सकते हैं। थोड़ा क्लीनर और एक साधारण समारोह के साथ। http://stackoverflow.com/questions/19863409/android-views-expand-animation – iGio90

उत्तर

2

अगले भाग कोड का उपयोग करें: ->

View hello= findViewById(R.id.lin_hello); 
final RelativeLayout rel=(RelativeLayout)findViewById(R.id.rel_nah_hide); 
hello.setOnClickListener(new OnClickListener() {   
    @Override 
    public void onClick(View v) { 
     expand=!expand; 
     Animation a=expand(rel, expand); 
     rel.setAnimation(a); 
     a.start(); 
    } 
}); 
संबंधित मुद्दे