显示/隐藏顶部栏,如chrome,但带有一些静态内容和列表视图

时间:2015-01-22 12:42:39

标签: android xml android-animation onscrolllistener

首先让我简要介绍一下,然后告诉你最终目标是什么:

到目前为止,我已经在我的listactivity中添加了一个scrolllistener,以便我可以检测到滚动,但它不会在android:animateLayoutChanges="true"上给我任何动画。因此,当我以编程方式更改视图的边距时,它会立即执行这些更改,而且不是很好,任何帮助都是最受欢迎的。

End goal picture

正如你在我的 xml 中看到的那样,我将首先放置我要隐藏的项目,以便其他将在Z轴上方。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:lector="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:animateLayoutChanges="true"
    android:background="@color/background_greyish">
<LinearLayout
    android:id="@+id/disappearingHeaderLabel"
    android:layout_width="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_marginTop="60dp"
    android:animateLayoutChanges="true"
    android:layout_height="50dp"
    android:background="@color/solid_white"
    android:orientation="horizontal"
    android:weightSum="7">

    <TextView
        android:id="@+id/ProductDetailLabel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dip"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="10dip"
        android:layout_weight="4"
        android:singleLine="true"
        android:text="PRODUKTER"
        android:textColor="@color/solid_red"
        android:textSize="20dp" />

    <Button
        android:id="@+id/priceChooserButton"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="10dp"
        android:layout_weight="3"
        android:background="@drawable/buttonbackground"
        android:clickable="true"
        android:singleLine="true"
        android:text="@string/retailprice"
        android:textColor="@android:color/white"
        android:textSize="15dp"
        android:textStyle="bold" />
</LinearLayout>

<dk.myapp.mobile.views.PageHeaderView
    android:id="@+id/header"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"></dk.myapp.mobile.views.PageHeaderView>

<LinearLayout
    android:id="@+id/expandingListContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:animateLayoutChanges="true"
    android:layout_alignParentLeft="true"
    android:layout_marginTop="110dp"
    android:layout_above="@+id/paginationBarContainer"
    android:orientation="vertical">


    <LinearLayout
        android:id="@+id/headerLabel"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:background="@color/transparent"
        android:orientation="horizontal"
        android:weightSum="11">

        <LinearLayout
            android:layout_width="0dp"
            android:layout_weight="3"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/sortAmountLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dip"
                android:singleLine="false"
                android:text="1354"
                android:textColor="@color/solid_red"
                android:textSize="15dp" />

            <TextView
                android:id="@+id/sortLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dip"
                android:text="Produkter"
                android:singleLine="true"
                android:textColor="@color/solid_red"
                android:textSize="15dp" />

        </LinearLayout>

        <Button
            android:id="@+id/filterBtn"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="10dp"
            android:layout_weight="4"
            android:background="@drawable/button_background_red"
            android:clickable="true"
            android:singleLine="true"
            android:text="@string/retailprice"
            android:textColor="@color/solid_white"
            android:textSize="15dp"
            android:textStyle="bold" />


        <Spinner
            android:id="@+id/sortSpinner"
            android:layout_width="0dp"
            android:layout_weight="4"
            android:layout_height="35dp"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/spinner_background"
            android:drawSelectorOnTop="true"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:prompt="@string/sort" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="1dip"
        android:background="@color/divider_color"></LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <ListView
            android:id="@+id/android:list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:divider="@color/divider_color"
            android:dividerHeight="1dip"
            android:paddingLeft="15dip"
            android:scrollbarStyle="outsideInset"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp" />

    </LinearLayout>
</LinearLayout>

 @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        int marginRemoved = firstVisibleItem * 30;
        if (marginRemoved > 110) {
            marginRemoved = 110;
        }
        if (previousMarginRemoved != marginRemoved) {
            previousMarginRemoved = marginRemoved;

            LinearLayout disappearingHeaderContainer = (LinearLayout) findViewById(R.id.disappearingHeaderLabel);
            RelativeLayout.LayoutParams disappearingHeaderContainerLayoutParams = (RelativeLayout.LayoutParams) disappearingHeaderContainer.getLayoutParams();
            LinearLayout expandingListViewContainer = (LinearLayout) findViewById(R.id.expandingListContainer);
            RelativeLayout.LayoutParams expandingListViewContainerParams = (RelativeLayout.LayoutParams) expandingListViewContainer.getLayoutParams();

            if (disappearingHeaderStartMargin == -1 && expandingHeaderStartMargin == -1) {
                disappearingHeaderStartMargin = disappearingHeaderContainerLayoutParams.topMargin;
                expandingHeaderStartMargin = expandingListViewContainerParams.topMargin;
            }

            float disappearingHeaderTopMarginFloat = disappearingHeaderStartMargin - (marginRemoved * pixelDensity);
            int disappearingHeaderTopMargin = Math.round(disappearingHeaderTopMarginFloat);

            if (marginRemoved > 50) {
                marginRemoved = 50;
            }

            float expandingContainerTopMarginFloat = expandingHeaderStartMargin - (marginRemoved * pixelDensity);
            int expandingContainerTopMargin = Math.round(expandingContainerTopMarginFloat);

            disappearingHeaderContainerLayoutParams.setMargins(disappearingHeaderContainerLayoutParams.leftMargin,
                    disappearingHeaderTopMargin,
                    disappearingHeaderContainerLayoutParams.rightMargin,
                    disappearingHeaderContainerLayoutParams.bottomMargin);

            expandingListViewContainerParams.setMargins(expandingListViewContainerParams.leftMargin,
                    expandingContainerTopMargin,
                    expandingListViewContainerParams.rightMargin,
                    expandingListViewContainerParams.bottomMargin);

            if ((lastChangeDate < System.currentTimeMillis()-100)) {
                lastChangeDate = System.currentTimeMillis();
                disappearingHeaderContainer.setLayoutParams(disappearingHeaderContainerLayoutParams);
                expandingListViewContainer.setLayoutParams(expandingListViewContainerParams);
            }
        }
    }
};

0 个答案:

没有答案