0

我的屏幕有以下 XML 结构。我希望我的 ID 为 JourneyLandingView 的相对布局在单击某个按钮时向上滑动并显示 ID 为 JourneyRootView 的相对布局视图,该视图将从底部向上滑动,因为 JourneyLandingView 将 Fill_Parent 设置为高度和宽度,因此旅程根视图必须低于覆盖整个的旅程着陆视图屏幕。我怎样才能做到这一点?

<?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>
4

2 回答 2

8

我相信使用 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>

爪哇(活动):

    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);

但是,我不太擅长制作自定义动画,所以我把它留给你自己。真的希望这有帮助:-)

于 2012-04-24T08:12:42.127 回答
3

I ended up using RelativeLAYOUT instead of LINEARLAYOUT as a parent element and than used following code to animate.

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;
    }
于 2012-04-24T08:47:33.790 回答