veo - Android: la llamada a GONE y luego a VISIBLE hace que la vista se muestre en el lugar equivocado
no se ve el diseño android studio (3)
podría tratar de poner ambas vistas dentro de RelativeLayout y establecer su posición relativa entre sí.
Tengo dos vistas, A y B, y la vista A está encima de la vista B (ambas son disposiciones lineales).
Cuando programó programáticamente que la vista A se GONE, desaparece y la vista que estaba justo debajo de ella (B) va al lugar de la vista A (como se esperaba).
Sin embargo, cuando configuro la misma vista (A) en VISIBLE de nuevo, se muestra SOBRE la vista B. No quiero eso. Quiero que la vista B regrese a su posición original (debajo de la vista A), que es lo que pensé que sucedería (pero no es así). ¿Cómo puedo hacer eso?
¡Gracias de antemano!
EDITAR - Código
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);
}
}
}
}
Y aquí va el 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>
Intente poner el diseño A y B en otro diseño lineal, digamos C, que tiene la siguiente propiedad: - height wrap_content, Orientation Vertical Funcionará como desee :)
Debe llamar a medida (ancho, alto) después de que la vista haya cambiado para ser visible. De lo contrario, la vista se mostrará de forma diferente.