标签: layouttransition

RecyclerView:Animate项目调整大小

我有一个RecyclerView.回收者视图的每个项目都可以扩展或不扩展.只能同时扩展一个项目.

本质上,我正在尝试在lolipop dialier中重新创建历史列表.

我发现在RecyclerView上使用LayoutTransition 使它崩溃.

但我无法正确设置两个状态之间项目视图更改的动画.

我曾尝试getItemAnimator().setSupportsChangeAnimations(true)过,notifyItemChanged(getPosition())但有两个问题:

  • 视图被重新创建,使得过渡非常奇怪,因为它在项目移动的同时在下一个项目上方淡入.出现的新视图不是调整大小,它已经是完整大小.
  • 当视图重新创建时,旧视图淡出而新视图淡入,这使视图背景颜色闪烁.

我还尝试LayoutTransition在动画的持续时间内设置项目视图,但这种方法的问题是RecycleView的布局立即更新而不跟随动画.

我为这两个尝试创建了一个关于这个问题的小型演示项目. 项目来源在这里.

如何在项目布局更改中创建平滑过渡?

android layouttransition android-recyclerview

19
推荐指数
1
解决办法
1万
查看次数

从Android布局转换中排除某些元素的动画

我有一个关于android布局转换框架的问题.特别地,我希望实现布局的某个部分向下或向上滑动的效果,这取决于另一个视图的可见性.

想象一下以下的布局.(请忽略嵌套的LinearLayouts;))

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true">

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

        <View
                android:id="@+id/changingView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="gone"/>

        <View
                android:id="@+id/changingView2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="gone"/>

    </LinearLayout>

    <LinearLayout
            android:id="@+id/movingView"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:animateLayoutChanges="false"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

现在我想达到什么样的是,当changingView1changingView2改变他们的能见度movingView或幻灯片上下.

通过为父布局启用LayoutTransition.CHANGING,滑动部件可以正常工作.但这有副作用,当添加或删除项目时,movingView也会被动画化,因为此布局会更改其边界.这就是我的问题,因为这会产生一个非常奇怪的动画.

所以回到我的问题.有没有办法保持滑动动画而不在movingView上动画布局绑定更改?

在禁用layoutTransitions movingView显然没有帮助,因为这只是影响孩子的意见动画.我也试过在父布局上启用和禁用不同的LayoutTransitions但到目前为止没有达到预期的效果.

如果我可以添加更多详细信息,请让我知道,否则我希望有人可以帮助我.

提前致谢!

android android-animation layouttransition

8
推荐指数
1
解决办法
988
查看次数

Android LayoutTransition - 如何排除视图

我用来LayoutTransition在我的布局之一中执行自动重新排列动画。

我需要将此布局中的给定子视图排除在动画之外(出现动画)。我仍然想要任何其他视图来实现 APPEAR 效果。所以我不能简单地禁用 APPEAR 效果。

我还无法找到实现这一目标的方法。任何帮助深表感谢。

谢谢,安德罗比恩。

android android-layout layouttransition

6
推荐指数
1
解决办法
769
查看次数

LayoutTransition同时消失和更改

我在这里有这个自定义的“底部操作栏”:https : //youtu.be/TPi5jtcs2wE,它在某些类型的网页(例如,文章/非文章)中出现和消失。我将最外面的设置为LinearLayoutanimateLayoutTransition并制作了另一个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" …
Run Code Online (Sandbox Code Playgroud)

android objectanimator layouttransition

5
推荐指数
1
解决办法
1573
查看次数

带有 wrap_content 的 LinearLayout 的 LayoutTransition

我正在尝试为LinearLayout高度设置为的视图的添加/删除操作设置动画wrap_content

目前我已经尝试设置android:animateLayoutChanges="true"LinearLayout 并以编程方式启用这样的转换:

LayoutTransition transition = new LayoutTransition();
transition.setDuration(300);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    transition.enableTransitionType(LayoutTransition.APPEARING);
    transition.enableTransitionType(LayoutTransition.DISAPPEARING);
    transition.setAnimateParentHierarchy(true);
}

container.setLayoutTransition(transition); 
Run Code Online (Sandbox Code Playgroud)

Appearing 似乎工作得非常流畅,并且可以根据需要设置动画和调整大小。

我遇到的问题是消失,因为LinearLayout在移除动画完成之前调整了容器的大小。

我也试过玩弄setAnimateParentHierarchy(),它似乎并没有真正影响容器调整大小的方式和时间。

android android-animation android-linearlayout layouttransition

5
推荐指数
1
解决办法
1261
查看次数