2015-09-21 8 views
3

У меня есть эта «нижняя панель действий» здесь: https://youtu.be/TPi5jtcs2wE, которая появляется и исчезает с определенными типами веб-страниц (например, статья/не статья). Я установил внешний LinearLayout с animateLayoutTransition и сделал другой объект LayoutTransition, но я хочу, чтобы панель исчезла одновременно с тем, как веб-просмотр регулирует ее высоту. Чтобы быть ясным, панель (relativeLayout) устанавливается на View.GONE, и webView должен расширяться, чтобы соответствовать родительскому (из-за layout_weight), поскольку полоса пропускается, но она не работает одновременно. Я попытался изменить LayoutTransition.setDuration() и .setStartDelay().LayoutTransition исчезает и меняется в одно и то же время

articleActivity XML:

<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" 

Конфигурация LayoutTransition:

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.CHANGING, 0); 
customTransition.setDuration(LayoutTransition.APPEARING, showArticleBar.getDuration()); 
customTransition.setDuration(LayoutTransition.DISAPPEARING, hideArticleBar.getDuration()); 
customTransition.setDuration(LayoutTransition.APPEARING, showArticleBar.getDuration()); 

container.setLayoutTransition(customTransition); 

hide_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"/> 

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="?android:attr/actionBarSize" 
    android:valueTo="0"/> 

Я, хотя анимация LayoutTransition.CHANGING заставит ее работать, но нет. Как я могу получить изменение высоты webView и удаление панели одновременно? Несмотря на установление продолжительности и задержки запуска, он не работает. Я думаю, проблема заключается в том, что CHANGING должен произойти после View.GONE из-за необходимости знать высоту после того, как представление ушло. Либо это, либо это не анимация CHANGING.

ответ

1

Я понял. Оказывается, мне нужны CHANGE_APPEARING и CHANGE_DISAPPEARING, чтобы сделать его более плавным, а не ИЗМЕНЕНИЕМ. Это не идеально, но теперь обе анимации происходят одновременно. Я пробовал использовать функции 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 сохраняется положение scrollY, хотя на новых веб-страниц, что является неправильным (должно быть в верхней части страницы на новых страницах). Я исправил его, включив webview в linearLayout.

<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"... 
Смежные вопросы