Fir*_*axy 5 android objectanimator layouttransition
我在这里有这个自定义的“底部操作栏”:https : //youtu.be/TPi5jtcs2wE,它在某些类型的网页(例如,文章/非文章)中出现和消失。我将最外面的设置为LinearLayout,animateLayoutTransition并制作了另一个LayoutTransition对象,但是我希望条形图在Web视图调整其高度的同时消失。需要明确的是,条形图(relativeLayout)设置为,View.GONE并且由于条形图消失了,因此webView应该扩展为匹配父级(由于layout_weight),但是两者不能同时进行。我尝试更改LayoutTransition.setDuration()和.setStartDelay()。
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"
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
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"/>
Run Code Online (Sandbox Code Playgroud)
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"/>
Run Code Online (Sandbox Code Playgroud)
我虽然LayoutTransition.CHANGING可以使动画工作,但没有。如何获取webView的高度变化并同时移除钢筋?尽管设置了持续时间和启动延迟,但仍无法正常工作。我认为问题是CHANGING必须在之后发生,View.GONE因为视图消失后需要知道高度。要么不是CHANGING动画,要么。
我想到了。结果我需要 CHANGE_APPEARING 和 CHANGE_DISAPPEARING 来使其更平滑,而不是 CHANGING。它并不完美,但现在两个动画同时发生。我尝试了实际的顶部操作栏的 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);
Run Code Online (Sandbox Code Playgroud)
这会产生一个问题,即 webview 在新网页上保持滚动位置,这是错误的(应该位于新页面的页面顶部)。我通过将 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"...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |