Android工具栏和用户图像动画,如Twitter

Android工具栏和用户图像动画,如Twitter,android,android-animation,android-toolbar,android-coordinatorlayout,android-twitter,Android,Android Animation,Android Toolbar,Android Coordinatorlayout,Android Twitter,我正在尝试实现工具栏和用户图像动画,就像Twitter用户配置文件中使用的那样 我尝试了很多方法,但我无法用展开时的背景将折叠的工具栏快速固定在屏幕顶部,并使用户图像首先位于工具栏上方,然后在滚动时缩小并移动到工具栏下方 twitter是如何在用户档案图像中产生平滑效果的?他们是如何先将该图像放在工具栏的前面,然后在滚动时放在后面,并在工具栏下方实现平滑效果的 我尝试了以下所有场景: 具有视差效果的工具栏,具有折叠分离平行轴倍增器 锁定工具栏设置高度100dp和最小高度?属性/操作栏大小 2个

我正在尝试实现工具栏和用户图像动画,就像Twitter用户配置文件中使用的那样

我尝试了很多方法,但我无法用展开时的背景将折叠的工具栏快速固定在屏幕顶部,并使用户图像首先位于工具栏上方,然后在滚动时缩小并移动到工具栏下方

twitter是如何在用户档案图像中产生平滑效果的?他们是如何先将该图像放在工具栏的前面,然后在滚动时放在后面,并在工具栏下方实现平滑效果的

我尝试了以下所有场景:

  • 具有视差效果的工具栏,具有折叠分离平行轴倍增器
  • 锁定工具栏设置高度100dp和最小高度?属性/操作栏大小
  • 2个工具栏,一个带有图像背景,另一个带有透明背景色
  • 缩放UserImage,然后平滑地移动Y位置(无法实现在滚动时将用户图像发送到工具栏下方的效果)
之前的情景对我来说都不是很好

XML层次结构:

<android.support.design.widget.CoordinatorLayout>
    <android.support.design.widget.AppBarLayout>
       <android.support.design.widget.CollapsingToolbarLayout>
             <LinearLayout>
                   <!--Some TextViews and ImageViews-->
             </LinearLayout>
             <ImageView src="My User profile Img"/> <!--Image first above toolbar and when toolbar is collapsing scale down and then go below toolbar-->
             <ImageView src="My background"  app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.8"/> 
             <android.support.v7.widget.Toolbar app:layout_collapseMode="pin"/>
       </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

  <!--Second Part, where the ViewPager should be pinned below the Toolbar-->
  <NestedScrollView app:layout_behavior="@string/appbar_scrolling_view_behavior">
   <LinearLayout> 
      <android.support.design.widget.TabLayout/>
      <android.support.v4.view.ViewPager/>
     </LinearLayout>
     </NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

我相信你的尝试比应该的更困难

collagingtorbalayout
具有通常与颜色一起使用的
contentScrim
元素,但实际上它可以是任何可绘制的

从源代码中,您可以看到它直接绘制在
工具栏的后面

//这有点奇怪。我们的scrim需要在工具栏后面(如果有),
//但是在后面的孩子面前。为此,我们截取
//drawChild()调用,并在绘制工具栏时首先绘制scrim

因此,我想您应该从“标准”XML布局开始:
`Coordinator->AppBar->CollasingToolbar->Toolbar

然后调用
setContentScrim
,使用一些BitmapDrawable查看发生了什么

collapsingToolbar.setContentScrim(
                   context.getResources()
                     .getDrawable(R.drawable.something);
在那之后,你需要一些几何学使它看起来像是在正确的地方,但这不是我的答案的范围。twitter似乎也使图像变得有点模糊,但这是另一个问题(使用RenderScript)


此外,可能是scrim在您滚动视图时一直在移动,然后您可能需要创建一个自定义可绘制文件,该文件将允许您偏移绘图位置以使其看起来正确。但这些都是“可能”和“但是”。主要思想就在这里。

您可以尝试以下xml文件:

<android.support.design.widget.CoordinatorLayout >
     <android.support.design.widget.AppBarLayout>
         <android.support.design.widget.CollapsingToolbarLayout
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:contentScrim="?attr/colorPrimary">
             <ImageView
                app:layout_collapseMode="parallax"/>

            <android.support.v7.widget.Toolbar
                app:layout_collapseMode="pin" />
         </android.support.design.widget.CollapsingToolbarLayout>

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

      <NestedScrollView app:layout_behavior="@string/appbar_scrolling_view_behavior">
   <LinearLayout> 
      <android.support.design.widget.TabLayout/>
      <android.support.v4.view.ViewPager/>
     </LinearLayout>
     </NestedScrollView>

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

谢谢您的回答,我将尝试使用带有可绘图功能的contentscrim,并让您知道它是否有效@JpCrow不确定你想要什么效果,但我又看了几遍,在我看来,Twitter用作内容scrim的是背景上相同图像的模糊版本。这样一来,当CollapsableLayout改变它的alpha值时,你会看到过渡Budius,你认为twitter在AppBarLayout和nestedScrollview中拥有所有的“顶级”内容吗?只有viewpager?我认为根本没有nestedScrollview。我工作的应用程序曾经有像Twitter一样的标题/查看页面,要将它们同步在一起真的很复杂。但对于CoordinatorLayout用例,我相信它只是带有
app:layou behavior=“@string/appbar\u scrolling\u view\u behavior”
height=match\u parent
的ViewPager。CoordinatorLayout会上下移动ViewPager,ViewPager中的RecyclerView会接收其余的滚动移动。但是是的@JpCrow所有其他“热门”内容都在
折叠工具栏中,谢谢,但这不是我想要实现的。这是一个正常而漂亮的例子你有没有这样的效果?@mio4kon没有,o实现了类似的效果,但没有这个效果:(你有没有实现滚动效果?首先是标题图像折叠的工具栏,然后是用户信息折叠,选项卡布局固定在toolbar@Ralph不幸的是没有:(搜索了一整天,我仍然无法实现它:(谢谢你的答复!