Android翻译动画,用于隐藏视图而不改变可见性

时间:2014-07-03 10:07:00

标签: android android-layout android-animation

我需要动画帮助。 (我的观点更复杂,我只向你展示我的布局xml的主要元素)

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" >

        <LinearLayout
            android:id="@+id/oneBigView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerVertical="true"
            android:gravity="center_vertical"
            android:orientation="vertical">


        </LinearLayout>

        <LinearLayout
            android:id="@+id/fourSmallViews"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:gravity="center_vertical"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:weightSum="2" >

                <RelativeLayout
                    android:id="@+id/topLeft"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1" >                       
                </RelativeLayout>

                <RelativeLayout
                    android:id="@+id/topRight"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1">
                </RelativeLayout>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="invisible"
                android:weightSum="2" >

                <RelativeLayout
                    android:id="@+id/bottomLeft"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1" >


                </RelativeLayout>

                <RelativeLayout
                    android:id="@+id/bottomRight"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1" >


                </RelativeLayout>
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>

我想显示和隐藏一些观点:

  1. 没有可见的视图
  2. topLeft和topRight从边缘移出(topLeft from left,topRight from right)到屏幕中心(parent)。
  3. 当topLeft和topRight实现其移动的一半bottomLeft和bottomRight显示与topLeft和topRight在prev步骤中完全相同
  4. 所有四个视图都可见几秒钟。
  5. topLeft和topRight从屏幕中心(父级)移出到边缘(topLeft到left,topRight到right)。
  6. 当topLeft和topRight实现其移动的一半时,leftLeft和bottomRight在top步骤中与topLeft和topRight完全相同
  7. 当所有视图消失时,oneBigView从左边缘移动并填充屏幕。
  8. oneBigView停留几秒钟。
  9. oneBigView从屏幕中心移动到左边缘。
  10. 当oneBigView消失时,所有内容都从1开始。
  11. animation overview

    我试过这样做,但总是有些不对劲:

    1. 我尝试添加一些翻译动画并更改Visiblity(我尝试了View.INVISIBLE和VIEW.GONE)onAnimationEnd:
    2. 显示

          <set xmlns:android="http://schemas.android.com/apk/res/android"
          android:interpolator="@android:anim/decelerate_interpolator">
          <translate 
          android:fromXDelta="-100%p" 
          android:toXDelta="0"
          android:duration="500" />
          </set>
      

      隐藏

          <set xmlns:android="http://schemas.android.com/apk/res/android"
          android:interpolator="@android:anim/decelerate_interpolator">
              <translate 
              android:fromXDelta="0"
              android:toXDelta="-100%p"
              android:duration="500" />
      
          </set>
      

      的.java

      final Animation leftIn=AnimationUtils.loadAnimation(this, R.anim.show);
      final Animation leftOut=AnimationUtils.loadAnimation(this, R.anim.hide);
      leftIn.setAnimationListener(new Animation.AnimationListener() {
      
              @Override
              public void onAnimationStart(Animation animation) {
                  // TODO Auto-generated method stub
      
                  //start animation for showing topRight bottomLeft and bottomRight 
                  //with propper startOffset
              }
      
              @Override
              public void onAnimationRepeat(Animation animation) {
                  // TODO Auto-generated method stub
      
              }
      
              @Override
              public void onAnimationEnd(Animation animation) {
                  // TODO Auto-generated method stub
                  left1.setVisibility(View.VISIBLE);
                  leftOut.setStartOffset(4000);
                  left1.startAnimation(leftOut);
      
              }
          });
      leftOut.setAnimationListener(new Animation.AnimationListener() {
      
              @Override
              public void onAnimationStart(Animation animation) {
                  // TODO Auto-generated method stub
      
              }
      
              @Override
              public void onAnimationRepeat(Animation animation) {
                  // TODO Auto-generated method stub
      
              }
      
              @Override
              public void onAnimationEnd(Animation animation) {
                  // TODO Auto-generated method stub
      
                  left1.setVisibility(View.INVISIBLE);
              }
          });
      

      等等......它完全可见,但动画效果并不流畅(大部分时间它都像我没有使用动画一样)。当我停止更改visiblity动画正常工作,但它不能完成这项工作。

      有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试更改视图的Alpha值,而不是让它不可见或消失。

答案 1 :(得分:0)

您应该尝试将fillAfter添加到<set>这样的内容:

<set 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:fillAfter="true">

使用View.INVISIBLEView.VISIBLE设置可见性通常不适用于动画。您唯一的选择是为<set>添加Alpha动画。这是一个模板:

<alpha
    android:fromAlpha="1.0"
    android:toAlpha="0.0"
    android:duration="200"
    android:interpolator="@android:anim/accelerate_interpolator"/>

根据您的需要进行调整。避免设置可见性。