弹出片段时,防止动画滚动到顶部

时间:2017-06-15 19:54:11

标签: android android-layout android-fragments android-animation android-scrollview

我有一个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文件,但无法阻止它滚动到顶部。有没有办法做到这一点,以便“片段视图状态”在动画之前不会改变?

注意:我尝试了FrameLayoutandroid: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>

0 个答案:

没有答案