I have two views, A and B, and the view A is above the view B (both are linear layouts).
When I, programmatically, set the view A to be GONE, it disappears and the view that was right below it (B) goes to the place of the view A (as expected).
However, when I set the very same view (A) to VISIBLE again, it is being shown OVER the view B. I don't want that. I want the view B to go back to its original position (below the view A) which is what I thought it would happen (but it doesn't). How can I do that?
Thank you in advance!
package com.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.ScaleAnimation;
import android.view.animation.Transformation;
import android.widget.LinearLayout.LayoutParams;
public class ViewGoneEffectActivity extends Activity implements OnClickListener {
private View viewComEfeito = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    findViewById(R.id.outroLinear).setOnClickListener(this);
    findViewById(R.id.segundo).setOnClickListener(this);
    viewComEfeito = findViewById(R.id.outroLinear);
}
@Override
public void onClick(View view) {
    if (view.getId() == R.id.outroLinear) {
        view.startAnimation(new MyScaler(1.0f, 1.0f, 1.0f, 0.0f, 500, view,
                true));
    }else if(view.getId() == R.id.segundo){
        viewComEfeito.setVisibility(View.VISIBLE);
    }
}
public class MyScaler extends ScaleAnimation {
    private LayoutParams mLayoutParams;
    private int mMarginBottomFromY, mMarginBottomToY;
    private boolean mVanishAfter = false;
    public MyScaler(float fromX, float toX, float fromY, float toY,
            int duration, View view, boolean vanishAfter) {
        super(fromX, toX, fromY, toY);
        setDuration(duration);
        mVanishAfter = vanishAfter;
        mLayoutParams = (LayoutParams) view.getLayoutParams();
        //int height = mView.getHeight();
        int height = viewComEfeito.getHeight();
        mMarginBottomFromY = (int) (height * fromY) + mLayoutParams.bottomMargin - height;
        mMarginBottomToY = (int) (0 - ((height * toY) + mLayoutParams.bottomMargin)) - height;
    }
    @Override
    protected void applyTransformation(float interpolatedTime,
            Transformation t) {
        super.applyTransformation(interpolatedTime, t);
        if (interpolatedTime < 1.0f) {
            int newMarginBottom = mMarginBottomFromY + (int) ((mMarginBottomToY - mMarginBottomFromY) * interpolatedTime);
            mLayoutParams.setMargins(mLayoutParams.leftMargin,  mLayoutParams.topMargin, mLayoutParams.rightMargin, newMarginBottom);
            viewComEfeito.getParent().requestLayout();
        } else if (mVanishAfter) {
            viewComEfeito.setVisibility(View.GONE);
        }
    }
}
}
And here goes the XML:
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
    android:id="@+id/outroLinear"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Welcome to the real world" />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="No" />
                <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Wow! =P" />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Free your mind!" />
                <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="In Tylor we trust" />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="First rule of fight club is" />
</LinearLayout>
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    android:id="@+id/segundo" />
 </LinearLayout>
you could try putting both views inside a RelativeLayout and set their position relative to each other.
Try putting both the layout A and B in another Linear Layout say C which has following property:- height wrap_content , Orientation Vertical It will work as you want :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With