animation可见性模式,GONE和VISIBLE

所以即时尝试animation​​,当我设置其他部件的线性布局的可见性,从GONE到VISIBLE和相反。我使用togglebuttons来显示和隐藏。 这里是一个图像来显示我想要做的事情:

在这里输入图像说明

我可以显示和隐藏,但即时通讯不遵循如何使滑动正确animation…. 🙁

inheritance人我的XML:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout01" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="vertical"> <ScrollView android:id="@+id/ScrollView01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="vertical"> <!-- TITULO1 --> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal" android:background="#848284" android:padding="4px"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView01" android:text="Informação Geral" android:textColor="#FFFFFF" android:gravity="left" android:textStyle="bold" android:singleLine="true" android:ellipsize="end" android:layout_gravity="center_vertical" android:textSize="18px" android:paddingLeft="4px"> </TextView> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_gravity="right|center_vertical" android:gravity="right|center_vertical" android:paddingTop="2px"> <ToggleButton android:layout_height="wrap_content" android:layout_width="wrap_content" android:textOff="Expandir" android:textOn="Minimizar" android:id="@+id/mostrar" android:width="80px"> </ToggleButton> </LinearLayout> </LinearLayout> <!--LINHA SEPARADORA--> <View android:id="@+id/View01" android:layout_width="wrap_content" android:background="#B5B5B5" android:layout_height="2px"> </View> <!-- CONTENT INITIALLY HIDDEN (GONE) --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:visibility="gone" android:id="@+id/informgeral" android:orientation="vertical"> <LinearLayout android:id="@+id/LinearLayout01" android:layout_height="wrap_content" android:layout_width="fill_parent" android:paddingBottom="5px" android:paddingTop="5px" android:paddingLeft="8px" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/consult_nrprocesso" android:textStyle="bold" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:ellipsize="end" android:layout_width="wrap_content" android:singleLine="true" android:text="@string/srch_number_proc"/> <TextView android:id="@+id/consult_nrprocessovalue" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:singleLine="true" android:ellipsize="end"/> </LinearLayout> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent"> <TextView android:id="@+id/consult_tipoprocinfo" android:text="Numero Atribuido ao Processo" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:singleLine="true" android:ellipsize="end" android:layout_width="wrap_content" android:textSize="12px"/> </LinearLayout> </LinearLayout> <View android:id="@+id/View01" android:layout_width="wrap_content" android:background="#B5B5B5" android:layout_height="1px"> </View> <LinearLayout android:id="@+id/LinearLayout02" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="5px" android:paddingBottom="5px" android:layout_width="fill_parent" android:paddingLeft="8px"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/consult_tipoproc" android:textStyle="bold" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:ellipsize="end" android:layout_width="wrap_content" android:singleLine="true" android:text="@string/proc_type"/> <TextView android:id="@+id/consult_tipoprocvalue" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:singleLine="true" android:ellipsize="end"/> </LinearLayout> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent"> <TextView android:id="@+id/consult_tipoprocinfo" android:text="Variante do Processo em causa" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:singleLine="true" android:ellipsize="end" android:layout_width="wrap_content" android:textSize="12px"/> </LinearLayout> </LinearLayout> <View android:id="@+id/View01" android:layout_width="fill_parent" android:background="#B5B5B5" android:layout_height="1px"> </View> <LinearLayout android:id="@+id/LinearLayout03" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="5px" android:paddingBottom="5px" android:layout_width="fill_parent" android:paddingLeft="8px"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/consult_etapa" android:textStyle="bold" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:ellipsize="end" android:layout_width="wrap_content" android:singleLine="true" android:text="@string/srch_task"/> <TextView android:id="@+id/consult_etapavalue" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:singleLine="true" android:ellipsize="end"/> </LinearLayout> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content"> <TextView android:id="@+id/consult_etapainfo" android:text="Etapa onde se encontra o processo" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:singleLine="true" android:ellipsize="end" android:layout_width="wrap_content" android:textSize="12px"/> </LinearLayout> </LinearLayout> <View android:id="@+id/View01" android:layout_width="wrap_content" android:background="#B5B5B5" android:layout_height="1px"> </View> <LinearLayout android:id="@+id/LinearLayout04" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="5px" android:paddingBottom="5px" android:layout_width="fill_parent" android:paddingLeft="8px"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/consult_criadopor" android:textStyle="bold" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:ellipsize="end" android:layout_width="wrap_content" android:singleLine="true" android:text="@string/criado_por"/> <TextView android:id="@+id/consult_criadoporvalue" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:singleLine="true" android:ellipsize="end"/> </LinearLayout> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content"> <TextView android:id="@+id/consult_criadoporinfo" android:text="Entidade responsável pela criação do Processo." android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:singleLine="true" android:ellipsize="end" android:layout_width="wrap_content" android:textSize="12px"/> </LinearLayout> </LinearLayout> <View android:id="@+id/View01" android:layout_width="wrap_content" android:background="#B5B5B5" android:layout_height="1px"> </View> <LinearLayout android:id="@+id/LinearLayout05" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="5px" android:paddingBottom="5px" android:layout_width="fill_parent" android:paddingLeft="8px"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/consult_assunto" android:textStyle="bold" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:ellipsize="end" android:layout_width="wrap_content" android:singleLine="true" android:text="@string/proc_subject"/> <TextView android:id="@+id/consult_assuntovalue" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:singleLine="true" android:ellipsize="end"/> </LinearLayout> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content"> <TextView android:id="@+id/consult_assuntoinfo" android:text="Assunto do Processo" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:singleLine="true" android:ellipsize="end" android:layout_width="wrap_content" android:textSize="12px"/> </LinearLayout> </LinearLayout> <View android:id="@+id/View01" android:layout_width="wrap_content" android:background="#B5B5B5" android:layout_height="1px"> </View> <LinearLayout android:id="@+id/LinearLayout05" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="5px" android:paddingBottom="5px" android:layout_width="fill_parent" android:paddingLeft="8px"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/consult_datainicio" android:textStyle="bold" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:ellipsize="end" android:layout_width="wrap_content" android:singleLine="true" android:text="@string/srch_datebeg"/> <TextView android:id="@+id/consult_datainiciovalue" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:singleLine="true" android:ellipsize="end"/> </LinearLayout> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content"> <TextView android:id="@+id/consult_dataincioinfo" android:text="Data da criação do Processo" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="left" android:singleLine="true" android:ellipsize="end" android:layout_width="wrap_content" android:textSize="12px"/> </LinearLayout> </LinearLayout> </LinearLayout> <!-- TITULO2 --> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal" android:background="#848284" android:padding="4px"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView01" android:text="Informação Complementar" android:textColor="#FFFFFF" android:gravity="left" android:textStyle="bold" android:singleLine="true" android:ellipsize="end" android:layout_gravity="center_vertical" android:paddingLeft="4px" android:textSize="16px"> </TextView> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_gravity="right|center_vertical" android:gravity="right|center_vertical" android:paddingTop="2px"> <ToggleButton android:layout_height="wrap_content" android:layout_width="wrap_content" android:textOff="Expandir" android:textOn="Minimizar" android:id="@+id/mostrar2" android:width="80px"> </ToggleButton> </LinearLayout> </LinearLayout> <View android:id="@+id/View01" android:layout_width="wrap_content" android:background="#B5B5B5" android:layout_height="2px"> </View> <!-- TITULO3 --> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal" android:background="#848284" android:padding="4px"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView01" android:text="Documentos Anexados" android:textColor="#FFFFFF" android:gravity="left" android:textStyle="bold" android:singleLine="true" android:ellipsize="end" android:layout_gravity="center_vertical" android:textSize="18px" android:paddingLeft="4px"> </TextView> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_gravity="right|center_vertical" android:gravity="right|center_vertical" android:paddingTop="2px"> <ToggleButton android:layout_height="wrap_content" android:layout_width="wrap_content" android:textOff="Expandir" android:textOn="Minimizar" android:id="@+id/mostrar" android:width="80px"> </ToggleButton> </LinearLayout> </LinearLayout> <!--LINHA SEPARADORA--> <View android:id="@+id/View01" android:layout_width="wrap_content" android:background="#B5B5B5" android:layout_height="2px"> </View> <!-- TITULO4 --> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal" android:background="#848284" android:padding="4px"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView01" android:text="Etapas" android:textColor="#FFFFFF" android:gravity="left" android:textStyle="bold" android:singleLine="true" android:ellipsize="end" android:layout_gravity="center_vertical" android:textSize="18px" android:paddingLeft="4px"> </TextView> <LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_gravity="right|center_vertical" android:gravity="right|center_vertical" android:paddingTop="2px"> <ToggleButton android:layout_height="wrap_content" android:layout_width="wrap_content" android:textOff="Expandir" android:textOn="Minimizar" android:id="@+id/mostrar" android:width="80px"> </ToggleButton> </LinearLayout> </LinearLayout> <!--LINHA SEPARADORA--> <View android:id="@+id/View01" android:layout_width="wrap_content" android:background="#B5B5B5" android:layout_height="2px"> </View> </LinearLayout> </ScrollView> 

这里是调用button事件的java代码:

 final ToggleButton bt=(ToggleButton) findViewById(R.id.mostrar); bt.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (bt.isChecked()) { /*TranslateAnimation slide = new TranslateAnimation(0, 0, 0, -findViewById(R.id.informgeral).getHeight()*2); slide.setDuration(500); slide.setFillAfter(true); findViewById(R.id.informgeral).startAnimation(slide);*/ findViewById(R.id.informgeral).setVisibility(View.VISIBLE);; } else { /* TranslateAnimation slide = new TranslateAnimation(0, 0, 0, findViewById(R.id.informgeral).getHeight()); slide.setDuration(500); slide.setFillAfter(true); findViewById(R.id.informgeral).startAnimation(slide);*/ //findViewById(R.id.listBut).startAnimation(slide); findViewById(R.id.informgeral).setVisibility(View.GONE);; } } }); 

像tomash之前说过的:没有简单的方法。

你可能想在这里看看我的答案 。
它解释了如何实现滑动(尺寸变化)视图。
在这种情况下,这是一个左和右的观点:左扩展,右消失。
这可能不是你所需要的,但是具有创造性的精神,你可以使它工作;)

要为布局更改设置animation效果,可以将以下属性添加到您的LinearLayout

 android:animateLayoutChanges="true" 

它会自动为您animation变化。

================================================

有关信息,如果使用android:animateLayoutChanges="true" ,那么通过anim xml的自定义animation将不起作用

通过覆盖setVisibility方法,可见性更改本身可以很容易地生成animation。 看完整的代码:

 public class SimpleViewAnimator extends FrameLayout { private Animation inAnimation; private Animation outAnimation; public SimpleViewAnimator(Context context) { super(context); } public void setInAnimation(Animation inAnimation) { this.inAnimation = inAnimation; } public void setOutAnimation(Animation outAnimation) { this.outAnimation = outAnimation; } @Override public void setVisibility(int visibility) { if (getVisibility() != visibility) { if (visibility == VISIBLE) { if (inAnimation != null) startAnimation(inAnimation); } else if ((visibility == INVISIBLE) || (visibility == GONE)) { if (outAnimation != null) startAnimation(outAnimation); } } super.setVisibility(visibility); } } 

这是一个相当古老的问题,仍然有评论表明,人们仍然有问题,所以这是我的解决scheme,具有以下附加function:

  • 调整animation(速度,types,…)
  • 不需要扩展任何类
  • 在我的情况下,animateLayoutChanges在新的CoordinatorLayout有问题

函数 – 例子(我在一个工具类中有这个function)

 public static void animateViewVisibility(final View view, final int visibility) { // cancel runnning animations and remove and listeners view.animate().cancel(); view.animate().setListener(null); // animate making view visible if (visibility == View.VISIBLE) { view.animate().alpha(1f).start(); view.setVisibility(View.VISIBLE); } // animate making view hidden (HIDDEN or INVISIBLE) else { view.animate().setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { view.setVisibility(visibility); } }).alpha(0f).start(); } } 

调整animation

调用view.animate()你可以调整animation到任何你想要的(设置持续时间,设置插值器等等…)。 您可以通过缩放来隐藏视图,而不是调整它的alpha值,只需在实用程序方法中将alpha(...)replace为scaleX(...)scaleY(...)

您可能想要使用ExpandableListView,一个特殊的ListView,允许您打开和closures组。

如果任何人在现在这样做,这是一个更容易的版本:

可以在XML中设置父布局的属性:

 android:animateLayoutChanges="true" 

这将添加/删除animation视图。
保持对视图的引用,并将其重新插入适当的索引处,并且您是黄金。

没有简单的方法来隐藏/显示视图的animation。 您可以尝试下面的答案中描述的方法: 如何animationView.setVisibility(GONE)

您可以使用API​​演示中解释的可展开列表视图来显示组

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html

要为列表项目animation添加animation,您必须重写getView方法并在每个列表项上应用翻译animation。 animation的值取决于每个列表项目的位置。 这是我试图在一个简单的列表视图很久以前的东西。