我有两个视图,A和B,视图A在视图B上方(都是线性布局).
当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图(B)将转到视图A的位置(如预期的那样).
但是,当我再次将相同的视图(A)设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置(在视图A下面),这是我认为会发生的事情(但事实并非如此).我怎样才能做到这一点?
先感谢您!
编辑 – 代码
- 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,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);
- }
- }
- }
}
这里是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>
解决方法
您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.