0

画面のXML構造は次のとおりです。あるボタンをクリックするとidjourneyLandingViewの相対レイアウトが上にスライドし、journeyLandingViewの高さと幅がFill_Parentに設定されているため、下から上にスライドするIDjourneyRootViewのビューRelativeLayoutを表示したいので、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>
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>

java(アクティビティ):

    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

親要素としてLINEARLAYOUTの代わりにRelativeLAYOUTを使用し、次のコードを使用してアニメーション化することになりました。

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 に答える