1

アプリに小さなアニメーションがあり、その最後で ListView の位置パラメーターが変更されます。listArr.layout(0, (int) (actionBar.getHeight() + filterTabHeight), listArr.getWidth(), (int) (actionBar.getHeight() + listArr.getHeight() + filterTabHeight));

つまり、開始時よりも少し低く設定されます (フルスクリーンで開始し、ボタンを押した後、少し下にスライドして、画面の上部にその下にあるものを表示します)。

リストを押すと、パラメータが実際に変更され、場所も実際に変更されていることがわかります。ここで、SlidingDrawer がその時点で開かれている場合、レイアウトが再配置され、リストがオンになったときに全画面表示に戻ります。

どうしてこんなことに?

private void setFilterAnimationAnimation(boolean isOpenAnimation) {
    TranslateAnimation verticalAnimation;
    float scale = context.getResources().getDisplayMetrics().density;
    filterTabHeight = FILTER_HEIGHT_IN_DP * scale;

    if (isOpenAnimation) {
        listArr.layout(0, (int) (actionBar.getHeight() + filterTabHeight), 
                listArr.getWidth(), (int) (actionBar.getHeight() + listArr.getHeight() + filterTabHeight));
        verticalAnimation = new TranslateAnimation(0, 0, -filterTabHeight, 0);
    } else {
        listArr.layout(0, (int) (actionBar.getHeight()), 
                listArr.getWidth(), (int) (actionBar.getHeight() + listArr.getHeight()));
        verticalAnimation = new TranslateAnimation(0, 0, filterTabHeight, 0);
    }
    verticalAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
    verticalAnimation.setDuration(250);
    animSet = new AnimationSet(false);
    animSet.cancel();
    animSet.reset();
    animSet.setFillAfter(true);
    animSet.addAnimation(verticalAnimation);
    isTabOpen = !isTabOpen;
    listArr.startAnimation(animSet);
}

これはxmlです:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.softtechnics.something"
android:id="@+id/coupon_list_layout"
style="@style/FillParent"
android:orientation="vertical" >

<include
    android:id="@+id/filter_tab"
    android:layout_width="match_parent"
    android:layout_height="34dp"
    android:layout_below="@+id/action_bar"
    layout="@layout/filter" />

<com.softtechnics.something.gui.components.ListArr
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/action_bar" />

<com.softtechnics.something.gui.components.ActionBar
    android:id="@+id/action_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" />

<ProgressBar
    android:id="@+id/progress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:visibility="gone" />

<com.softtechnics.something.gui.components.Footer
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@id/action_bar"
    android:scaleType="fitXY"
    android:src="@drawable/head_bar_shadow" />

フッターは私の SlidingDrawer です。ありがとう!

4

1 に答える 1

1

レイアウト メソッドはビューに永続的な変更を適用しません。したがって、次にレイアウトが更新されると、すべてが元に戻ります。listView の LayoutParams を変更して永続的な変更を適用し、これを読み取ります

于 2012-12-30T09:25:49.573 に答える