2013-05-03 78 views
0

判定我有两个FrameLayout小号相互重叠的底部(让我们称之为layout_frontlayout_back,其中每个布局具有多个文字和图像视图)。最初layout_back的可见度将消失。动画布局到的另一布局,其距离在运行时

我想要什么来实现:当我想layout_back显示,我将它设置为可见的,并且我希望动画layout_front滑落到layout_back的底部。效果就像我有两张“卡片”,滑下前面的卡片在后面显示另一张卡片。

问题:第一个明显的方式做到这一点是由layout_front这样创建动画的xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate 
    android:duration="400" 
    android:fillAfter="true" 
    android:fromYDelta="0%" 
    android:toYDelta="100%" /> 
</set> 

1)我的第一个问题是,在layout_front不会动画完成后,留在了那里,但翻译后立即回到原来的位置。我应该怎么做才能让在滑下后留在

2)我的第二个问题更严重。 layout_front滑动的距离(这是layout_back的高度)直到运行时才确定。有没有办法动态设置YDelta的值?

回答

0

我自己回答。布局会是这个样子:

<RelativeLayout 
     android:id="@+id/pair_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <FrameLayout 
      android:id="@id/layout_back" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/list_background" 
      android:visibility="gone" > 

      <TextView 
       android:id="@id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium"/> 
     </FrameLayout> 

     <FrameLayout 
      android:id="@id/layout_front" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/background"> 

      <Button 
       android:id="@id/button_blue" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" > 
      </Button> 
     </FrameLayout> 
    </RelativeLayout> 

布局在后面由一个TextView的,而在前面的布局是一个按钮。当按钮被点击时,它将滑动到textview的底部。按钮监听器是这样实现的:

public class ButtonListener implements OnClickListener { 
    final FrameLayout l_front; 
    final FrameLayout l_back; 

    public blueListener(FrameLayout f, FrameLayout b) { 
     this.l_back = b; 
     this.l_front = f; 
    } 

    @Override 
    public void onClick(View v) { 

     l_back.setVisibility(View.VISIBLE); 
     l_back.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
     l_front.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 

     TranslateAnimation tanim = new TranslateAnimation(
       TranslateAnimation.ABSOLUTE, 0.0f, 
       TranslateAnimation.ABSOLUTE, 0.0f, 
       TranslateAnimation.ABSOLUTE, 0.0f, 
       TranslateAnimation.ABSOLUTE, l_back.getMeasuredHeight()); 
     tanim.setDuration(400); 
     tanim.setFillAfter(true); 
     tanim.setInterpolator(new DecelerateInterpolator()); 
     l_front.setAnimation(tanim); 
     ((RelativeLayout)l_front.getParent()).getLayoutParams().height 
     = l_back.getMeasuredHeight() + l_front.getMeasuredHeight(); 
    } 
}