无法将动画从回收视图过渡到详细信息屏幕

时间:2018-09-06 12:02:18

标签: android animation android-recyclerview fragment transition

我在使用简单的过渡动画时遇到麻烦,在该动画中,我具有几个项目的回收视图,并且在按下某个项目时,我希望该项目上的文本在打开的详细信息屏幕中向上移动到新位置。 我创建了一个github项目,并提供了我的意思

https://github.com/guylis/android_projects/tree/master/testAnimation/app/src/main/java/guy/testanimation

FragmentA具有包含项目的回收视图 片段B的详细信息屏幕显示了该项目

  • 按下fragmentA中的项目时,适配器将其传递给fragmentB,从而打开详细信息屏幕
  • 我为fragmentA中显示的每个视图定义了一个唯一的过渡名称
  • 打开详细信息屏幕时,我首先推迟了动画,创建了相对移动动画,只有在将过渡名称设置为相对文本视图的onCreate之后,我才继续动画。
  • 动画不起作用,文本简单地从一个位置“跳转”到另一个位置,而不是移向另一个位置

谢谢

1 个答案:

答案 0 :(得分:0)

您可以考虑使用配对,而不是这样做。

   holder.itemView.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(mContext /*your context from main activity*/, Destination.class);

            Pair[] pairs = new Pair[3]; /* careful about the number and how many element you want to animate*/
            pairs[0]= new Pair<View, String>(holder.X /*item to animate to next activity*/, "transitionX" /* name of transition animation that you have to set on your xml file of the item*/);
            pairs[1]= new Pair<View, String>(holder.Y, "transitionY");
            pairs[2]= new Pair<View, String>(holder.Z, "transitionZ");

            ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation((Activity) mContext, pairs);
            // start the activity
            mContext.startActivity(intent, options.toBundle());
        }
    }); 


 class CourseViewHolder extends RecyclerView.ViewHolder {
        TextView X;
        ImageView Y;
        LinearLayout Z; /* you can animate layout as well*/ 

        private CourseViewHolder(View itemView) {
             super(itemView);         
             X= itemView.findViewById(R.id.x);
             Y=itemView.findViewById(R.id.y);
             Z=itemView.findViewById(R.id.z);
        }
 }

itemView.xml文件

   <TextView
        android:id="@+id/x"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:transitionName="transitionX"/>

   <ImageView
        android:id="@+id/x"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:transitionName="transitionY"/>

   <LinearLayout    <!-- you can animate Layout to another object -->
        android:id="@+id/Z"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:transitionName="transitionZ">
        ----------------------
        --------------------
   </LinearLayout>

destinationclass.xml文件

   <TextView
        android:id="@+id/x_will_transit_to"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:transitionName="transitionX"/> <!-- The name of transition must be the same as java file and both of the element from xml file -->

   <!-- You can also animate one type of View to another when transition take place -->

   <Button
        android:id="@+id/y_will_transit_to"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:transitionName="transitionY"/>

   <ImageView
        android:id="@+id/z__will_transit_to"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:transitionName="transitionZ"/>

无论是从recyclerview过渡到片段还是其他,都无所谓。您只需要在动作内或onClick发生的位置设置动画即可。在两个文件的布局中为过渡指定相同的名称,将在其中进行过渡。最后,以防万一,请检查您要测试的模拟器或移动设备,该应用程序的所有动画比例至少应为1倍(在开发人员选项中)。希望它会有所帮助,即使它可能不是您要找的答案。