Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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 LayoutTransition消失和更改不同时发生_Android_Objectanimator_Layouttransition - Fatal编程技术网

Android LayoutTransition消失和更改不同时发生

Android LayoutTransition消失和更改不同时发生,android,objectanimator,layouttransition,Android,Objectanimator,Layouttransition,我在这里有一个自定义的“底部操作栏”:,它随某些类型的网页(例如文章/非文章)出现和消失。我使用animateLayoutTransition设置了最外层的LinearLayout,并创建了一个不同的LayoutTransition对象,但我希望在webview调整其高度的同时,该条消失。需要明确的是,条形图(relativeLayout)被设置为View.GONE,由于条形图已消失,webView应展开以匹配父视图(由于布局权重),但它不会同时执行这两项操作。我试图更改LayoutTransi

我在这里有一个自定义的“底部操作栏”:,它随某些类型的网页(例如文章/非文章)出现和消失。我使用
animateLayoutTransition
设置了最外层的
LinearLayout
,并创建了一个不同的
LayoutTransition
对象,但我希望在webview调整其高度的同时,该条消失。需要明确的是,条形图(relativeLayout)被设置为
View.GONE
,由于条形图已消失,webView应展开以匹配父视图(由于布局权重),但它不会同时执行这两项操作。我试图更改
LayoutTransition.setDuration()
.setStartDelay()

ArticleActivityXML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:id="@+id/container_article"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="app.morningsignout.com.morningsignoff.ArticleActivity"
    tools:ignore="MergeRootFrame"
    android:background="@android:color/white"
    android:animateLayoutChanges="true">
    <app.com.morningsignout.morningsignout.CustomWebView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:id="@+id/webView_article"
        android:layout_gravity="center"
        android:layout_weight="9" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:layout_weight="0"
隐藏\u action\u bar.xml:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="translationY"
    android:duration="300"
    android:valueFrom="0"
    android:valueTo="?android:attr/actionBarSize"/>
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="translationY"
    android:duration="300"
    android:valueFrom="?android:attr/actionBarSize"
    android:valueTo="0"/>

show_action_bar.xml:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="translationY"
    android:duration="300"
    android:valueFrom="0"
    android:valueTo="?android:attr/actionBarSize"/>
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="translationY"
    android:duration="300"
    android:valueFrom="?android:attr/actionBarSize"
    android:valueTo="0"/>


我认为
LayoutTransition.CHANGING
animation可以让它工作,但是不行。如何让webView的高度更改和删除栏同时发生?尽管设置了排队的持续时间和启动延迟,但它不起作用。我认为问题在于
更改
必须发生在
视图消失后,因为需要知道视图消失后的高度。或者这不是一个改变的动画。

我想出来了。事实证明,我需要改变出现和改变消失,使它更平滑,而不是改变。这并不完美,但现在两个动画同时发生。我尝试了实际的TopActionBar的hide()/show()函数,我认为这是正常的

LinearLayout container = (LinearLayout) findViewById(R.id.container_article);
LayoutTransition customTransition = new LayoutTransition();
// customTransition.enableTransitionType(LayoutTransition.CHANGING);
// customTransition.disableTransitionType(LayoutTransition.CHANGE_APPEARING);
// customTransition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
customTransition.setAnimator(LayoutTransition.APPEARING, showArticleBar);
customTransition.setAnimator(LayoutTransition.DISAPPEARING, hideArticleBar);
customTransition.setStartDelay(LayoutTransition.APPEARING, 0);
customTransition.setStartDelay(LayoutTransition.DISAPPEARING, 0);
customTransition.setStartDelay(LayoutTransition.CHANGE_APPEARING, 0);
customTransition.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0);
// customTransition.setStartDelay(LayoutTransition.CHANGING, 0);
customTransition.setDuration(LayoutTransition.APPEARING, showArticleBar.getDuration());
customTransition.setDuration(LayoutTransition.DISAPPEARING, hideArticleBar.getDuration());
customTransition.setDuration(LayoutTransition.CHANGE_APPEARING, showArticleBar.getDuration());
customTransition.setDuration(LayoutTransition.CHANGE_DISAPPEARING, hideArticleBar.getDuration());
// customTransition.setDuration(LayoutTransition.APPEARING, showArticleBar.getDuration());

container.setLayoutTransition(customTransition);
这就产生了一个问题,即webview在新网页上仍然保持滚动位置,这是错误的(应该在新网页的页面顶部)。我通过在线性布局中包含webview来修复它

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:id="@+id/container_article"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="app.morningsignout.com.morningsignoff.ArticleActivity"
    tools:ignore="MergeRootFrame"
    android:background="@android:color/transparent"
    android:animateLayoutChanges="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="9">

        <app.com.morningsignout.morningsignout.CustomWebView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/webView_article"
            android:layout_gravity="center" />
    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:layout_weight="0"...