Mau*_*ker 14 android android-animation kotlin android-transitions android-recyclerview
我有RecyclerView很多项目,基本上是一些CardView.
这些卡片在他们的身体中间有一个支持文本,GONE默认情况下可见性设置为,VISIBLE当我点击卡片右侧的箭头时,它就会生成.
我正在尝试在文本显示的同时对卡进行动画处理,同时它会崩溃.
下图显示了扩展卡和折叠卡:
该CardView布局(我已经删除了可读性某些部分):
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="3dp"
card_view:cardElevation="4dp"
card_view:cardUseCompatPadding="true"
android:id="@+id/root">
<LinearLayout
android:id="@+id/item_ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="@dimen/activity_vertical_margin">
<!-- The header with the title and the item -->
<TextView
android:id="@+id/body_content"
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:layout_marginBottom="8dp"
android:text="@string/about_page_description"
android:textColor="@color/secondaryText"
android:visibility="gone"/>
<!-- The divider, and the footer with the timestamp -->
</LinearLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)
当卡片展开并露出身体时TextView,动画正在工作,但是,当我试图将其折叠回来时,动画片下方的卡片与第一张卡片重叠.
例:
我之前已经在这里问了一个关于这种行为的类似问题,但是这个解决方案并不适用TextView于卡片的中间位置.
负责动画部分的代码在RecyclerView适配器内部.箭头有一个点击监听器,可以调用以下方法:
private fun toggleVisibility() {
if (bodyContent.visibility == View.GONE || bodyContent.visibility == View.INVISIBLE) {
btSeeMore.animate().rotation(180f).start()
TransitionManager.beginDelayedTransition(root, AutoTransition())
bodyContent.visibility = View.VISIBLE
}
else {
btSeeMore.animate().rotation(0f).start()
TransitionManager.beginDelayedTransition(root, AutoTransition())
bodyContent.visibility = View.GONE
}
}
Run Code Online (Sandbox Code Playgroud)
哪里root是我的CardView.
我也尝试使用LinearLayout而不是卡本身来进行延迟转换,但这也不起作用.
如何为我的布局实现这种行为?
您必须在 RecyclerView 上执行转换,而不是在单个项目上执行。否则,自动转换不会考虑 RecyclerView 布局更改,因为它只会查看该子视图中的更改,即使事实上其他 ViewHolder 受到间接影响(布局参数正在更改)。
因此,不要将“root”(项目视图)传递给 TransitionManager#beginDelayedTransition,而是传递对 RecyclerView 的引用
我建议您使用 Animator 框架并将高度动画应用到您的 TextView。
这是一个不错的库,您可以使用:https ://github.com/cachapa/ExpandableLayout
我还建议您检查它的源代码,它使用动画器
| 归档时间: |
|
| 查看次数: |
1511 次 |
| 最近记录: |