Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 折叠工具栏布局是否可以定义何时折叠?_Android_Android Collapsingtoolbarlayout - Fatal编程技术网

Android 折叠工具栏布局是否可以定义何时折叠?

Android 折叠工具栏布局是否可以定义何时折叠?,android,android-collapsingtoolbarlayout,Android,Android Collapsingtoolbarlayout,我有一个正在工作的折叠工具栏布局。我看到的唯一问题是,当向下滚动时,展开时显示的内容消失得太快,我想知道是否有可能定义内容消失和应用程序栏出现的位置。似乎在折叠了约25%后,它已经隐藏了内容,并且只显示appbar的颜色。在Google Play应用程序中,你可以看到这种情况发生得非常晚,几乎完全崩溃。创建一个类,实现AppBarLayout.OnOffsetChangedListener并覆盖onOffsetChanged方法 <android.support.design.widget

我有一个正在工作的折叠工具栏布局。我看到的唯一问题是,当向下滚动时,展开时显示的内容消失得太快,我想知道是否有可能定义内容消失和应用程序栏出现的位置。似乎在折叠了约25%后,它已经隐藏了内容,并且只显示appbar的颜色。在Google Play应用程序中,你可以看到这种情况发生得非常晚,几乎完全崩溃。

创建一个类,实现AppBarLayout.OnOffsetChangedListener并覆盖onOffsetChanged方法

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:ignore="RtlHardcoded"
    >

    <android.support.design.widget.AppBarLayout
        android:id="@+id/main.appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        >

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/main.collapsing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
            >

            <ImageView
                android:id="@+id/main.imageview.placeholder"
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:scaleType="centerCrop"
                android:src="@drawable/quila2"
                android:tint="#11000000"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.9"
                />

            <FrameLayout
                android:id="@+id/main.framelayout.title"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:layout_gravity="bottom|center_horizontal"
                android:background="@color/primary"
                android:orientation="vertical"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.3"
                >

                <LinearLayout
                    android:id="@+id/main.linearlayout.title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:orientation="vertical"
                    >

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:gravity="bottom|center"
                        android:text="@string/quila_name"
                        android:textColor="@android:color/white"
                        android:textSize="30sp"
                        />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:layout_marginTop="4dp"
                        android:text="@string/quila_tagline"
                        android:textColor="@android:color/white"
                        />

                </LinearLayout>
            </FrameLayout>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.Toolbar
        android:id="@+id/main.toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/primary"
        app:layout_anchor="@id/main.framelayout.title"
        app:theme="@style/ThemeOverlay.AppCompat.Dark"
        app:title=""
        >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            >

            <Space
                android:layout_width="@dimen/image_final_width"
                android:layout_height="@dimen/image_final_width"
                />

            <TextView
                android:id="@+id/main.textview.title"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginLeft="8dp"
                android:gravity="center_vertical"
                android:text="@string/quila_name2"
                android:textColor="@android:color/white"
                android:textSize="20sp"
                />

        </LinearLayout>
    </android.support.v7.widget.Toolbar>

</android.support.design.widget.CoordinatorLayout>

我会给你们举一个例子,说明我是如何达到你们所需要的

因为您希望内容在60%之后开始去共享,所以首先声明一个如下的变量

private static final int PERCENTAGE_TO_SHOW_ELEMENT = 60;
然后,您必须声明一个变量来知道您的元素是否已经隐藏,并声明一个变量来跟踪滚动百分比

private int mMaxScrollSize;
private boolean mIsElementHidden;
之后,您必须向appBarLayout添加名为addOnOffsetChangedListener的侦听器,如下所示,并重写onOffsetChanged方法:

 yourAppBar.addOnOffsetChangedListener(this);
在onOffsetChanged方法中,使用以下代码:

@Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            if (mMaxScrollSize == 0)
                mMaxScrollSize = appBarLayout.getTotalScrollRange();

            int currentScrollPercentage = (Math.abs(verticalOffset)) * 100
                    / mMaxScrollSize;

            if (currentScrollPercentage >= PERCENTAGE_TO_SHOW_ELEMENT) {
                if (!mIsElementHidden) {
                    mIsElementHidden= true;
                    ViewCompat.animate(yourView).scaleY(0).scaleX(0).start();
                    ViewCompat.animate(anotherView).scaleY(0).scaleX(0).start();


                }
            }

            if (currentScrollPercentage < PERCENTAGE_TO_SHOW_ELEMENT) {
                if (mIsElementHidden) {
                    mIsElementHidden= false;
                    ViewCompat.animate(yourView).scaleY(1).scaleX(1).start();
                    ViewCompat.animate(anotherView).scaleY(1).scaleX(1).start();

                }
            }
        } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            //You can change something if your layout is different in LANDSCAPE
        }

    }
@覆盖
公共无效onOffsetChanged(AppBarLayout AppBarLayout,int verticalOffset){
if(getResources().getConfiguration().orientation==Configuration.orientation\u纵向){
如果(mMaxScrollSize==0)
mMaxScrollSize=appBarLayout.getTotalScrollRange();
int currentScrollPercentage=(Math.abs(垂直偏移))*100
/MMAXcrollSize;
如果(currentScrollPercentage>=百分比到显示元素){
如果(!mIsElementHidden){
mIsElementHidden=true;
ViewCompat.animate(yourView.scaleY(0.scaleX(0.start));
ViewCompat.animate(另一个视图).scaleY(0.scaleX(0.start));
}
}
if(当前滚动百分比<百分比到显示元素){
如果(mIsElementHidden){
mIsElementHidden=false;
animate(yourView.scaleY(1.scaleX(1.start));
动画(另一个视图).scaleY(1.scaleX(1.start();
}
}
}else if(getResources().getConfiguration().orientation==Configuration.orientation\u横向){
//如果您的布局在景观中不同,您可以更改某些内容
}
}

您可以使用变量PERCENTAGE TO SHOW元素来决定何时显示或取消视图。

我找到了解决方案。您不必强制使用java代码,您可以使用style属性scrimVisibleHeightTrigger来定义它,但请记住,使用的值应该大于actionbar的大小,遗憾的是使用?acionBarSize不起作用,因此您必须考虑appbar的高度,并向其添加一些DPs

<android.support.design.widget.CollapsingToolbarLayout
    android:id="@+id/collapsing_toolbar"
    style="@style/Widget.MyCustomWidget.CollapsingHeader"

<style name="Widget.MyCustomWidget.CollapsingHeader" parent="@style/Widget.Design.CollapsingToolbar">
    <item name="scrimAnimationDuration">200</item>
    <item name="scrimVisibleHeightTrigger">1dp</item>        
</style>

谢谢,我已经在用这个监听器设置标题了。什么是yourView和anotherView?此解决方案不会覆盖我正在显示的图像的隐藏,这是如何工作的?yourView和anotherView是在滚动发生时要隐藏或显示的视图,并与所需的%匹配。我使用此代码隐藏和显示图像,正在运行,并在已发布的应用程序中进行了测试。谢谢,但很抱歉,此解决方案似乎不起作用。此外,布局没有与代码结合,它缺少一些东西。是的,我没有在你去之前发送完整布局,附加完整布局,试试这个
<android.support.design.widget.CollapsingToolbarLayout
    android:id="@+id/collapsing_toolbar"
    style="@style/Widget.MyCustomWidget.CollapsingHeader"

<style name="Widget.MyCustomWidget.CollapsingHeader" parent="@style/Widget.Design.CollapsingToolbar">
    <item name="scrimAnimationDuration">200</item>
    <item name="scrimVisibleHeightTrigger">1dp</item>        
</style>