动画相对布局

时间:2012-04-24 07:54:05

标签: android android-layout

我的屏幕有XML结构。我希望我的相对布局与id journeyLandingView在点击某个按钮时向上滑动并显示具有id journeyRootView的视图RelativeLayout,它将从底部向上滑动,因为journeyLandingView将Fill_Parent设置为高度和宽度,因此journeyRootView必须低于遍历覆盖整个行程的journeyLandingView屏幕。我怎么能这样做?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/journeyLandingView">   
    </RelativeLayout>

    <RelativeLayout android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:id="@+id/journeyRootView"
        android:background="@drawable/root_layer">

    </RelativeLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:7)

我相信你想要的动画类型可以使用ViewFlipper来实现。

您可以将RelativeLayouts放入ViewFlipper,并以编程方式在ViewFlipper上设置输入和输出动画。

示例代码:

xml(布局):

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">
            <Button 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent"
                android:text="click me"
                android:id="@+id/btn"
                />
            <ViewFlipper 
                android:layout_height="fill_parent"
                android:layout_width="fill_parent"
                android:id="@+id/viewFlipper"
                >
            <RelativeLayout 
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/journeyLandingView"
                android:background="#FFFFFF"
                >  
            </RelativeLayout>
            <RelativeLayout 
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent"
                android:id="@+id/journeyRootView"
                android:background="#FFA500"
                >

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

java(Activity):

    ViewFlipper vflipper;
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        vflipper = (ViewFlipper) findViewById(R.id.viewFlipper);
        vflipper.setInAnimation(this, android.R.anim.slide_in_left);
        vflipper.setOutAnimation(this, android.R.anim.slide_out_right);

        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(this);
    }

    public void onClick(View v) 
    {
        vflipper.showNext();
    }

您将使用自定义动画而不是“android.R.anim.slide_in_left”和“android.R.anim.slide_out_right”,我在示例代码中使用了以下行:

        vflipper.setInAnimation(this, android.R.anim.slide_in_left);
        vflipper.setOutAnimation(this, android.R.anim.slide_out_right);

然而,我并不擅长制作自定义动画,所以我将它留给自己。 真的希望这会有所帮助: - )

答案 1 :(得分:2)

我最终使用RelativeLAYOUT而不是LINEARLAYOUT作为父元素,而不是使用以下代码来设置动画。

TranslateAnimation slide = new TranslateAnimation(0, 0, 0, -1*Methods.screenHeight(this));   
             slide.setDuration(1000);   
             slide.setFillAfter(true);   
             journeyLandingView.startAnimation(slide); 
             slide = new TranslateAnimation(0, 0, Methods.screenHeight(this), 0);   
             slide.setDuration(1000);   
             slide.setFillAfter(true);   
             journeyRootView.startAnimation(slide);

public static int screenHeight(Context ctx) {
        DisplayMetrics displaymetrics = new DisplayMetrics();
        ((Activity) ctx).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);                 
        return displaymetrics.heightPixels;
    }