我有一个RecyclerView
的片段,如果RecyclerView
有超过一定数量的项目,我会增加根布局的高度,以便我可以向下滚动(我知道{ {1}}可以自己滚动,我想滚动整个布局)。现在,如果我滚动到底部后按回,我设置的回弹动画就像往常一样:
RecyclerView
但是,此动画会导致片段在消失前滚动到顶部。起初我以为这是由于<!-- slide_out_right.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" >
<translate android:duration="250" android:fromXDelta="0%" android:toXDelta="100%"/>
<alpha android:duration="250" android:fromAlpha="1.0" android:toAlpha="0.0"/>
</set>
我绕着ScrollView
我用来放置碎片;但是,当我禁用片段动画时,这个问题就消失了。我已经玩过自定义动画的XML文件,但无法阻止它滚动到顶部。有没有办法做到这一点,以便“片段视图状态”在动画之前不会改变?
注意:我尝试了FrameLayout
和android:fillAfter
属性,但没有帮助。
修改:
我在哪里设置自定义转场:
android:fillBefore
处理背压: // ITEM FRAGMENT
public void launchItemFragment(String itemId, String itemName, ActivityDetail activityDetail) {
if (mItemFrag == null) {
mItemFrag = new ItemFragment(); //ItemFragment.newInstance(itemId, itemName, activityDetail);
}
Bundle bundle = new Bundle();
bundle.putString("itemId", itemId);
bundle.putString("itemName", itemName);
bundle.putParcelable("activityDetail", activityDetail);
mItemFrag.setArguments(bundle);
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right_scroll);
ft.replace(R.id.main_container, mItemFrag, "fragment_item").addToBackStack(null).commit();
popBackStack()
。
MainActivity相关布局部分(根布局为ConstraintLayout):
getBackStackEntryCount() > 0
布局有问题的片段的xml :
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
android:fillViewport="true"
android:overScrollMode="never"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@+id/guideline_cart_right"
app:layout_constraintRight_toLeftOf="@+id/guideline_main_right"
app:layout_constraintTop_toTopOf="@+id/guideline_top_nav_bottom"
tools:layout_constraintBottom_creator="1"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintRight_creator="1"
tools:layout_constraintTop_creator="1">
<FrameLayout
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/MainFragStyle"/>
</ScrollView>
我如何调整布局大小(可能会有所帮助):
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_fragment_item"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/header_section_background"
android:background="@color/colorItemHeaderBackground"
app:layout_constraintBottom_toTopOf="@+id/guideline_header_bottom"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<View
android:id="@+id/header_section_triangle"
android:layout_width="40dp"
android:layout_height="22dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="@drawable/triangle"
app:layout_constraintBottom_toBottomOf="@+id/guideline_header_bottom"
app:layout_constraintHorizontal_bias="0.15"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<TextView
android:id="@+id/header_item_title"
style="@style/ItemHeaderTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:text="Title"
app:layout_constraintBottom_toTopOf="@+id/guideline_header_bottom"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.2"/>
<TextView
android:id="@+id/header_item_duration"
style="@style/ItemHeaderSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:text="Duration"
app:layout_constraintBottom_toTopOf="@+id/guideline_header_bottom"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.65"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/item_details"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:overScrollMode="never"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/guideline_header_bottom"/>
<android.support.constraint.Guideline
android:id="@+id/guideline_header_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="172dp"/>
</android.support.constraint.ConstraintLayout>