Layout expand animation

android, android-animation, android-layout

Solution

Use next part code: ->

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();
    }
});

Problem

I have done the layout expand animation with the following code. It works fine when we invoke the animation by clicking a text view, but the same is not happening when I try to do that by clicking a layout. Can anyone help me in solving this? ``` 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; } ``` and following is the xml layout, ``` <?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> ```

Original source

Related problems