2017-02-23 6 views
2

私は自分のアプリケーションで共有トランジションを実装しようとしています。私はRecyclerViewのImageViewを次のフラグメントに存在させ、RecyclerViewからフラグメントに共有するようにします。しかし、それは動作していません。ここで私はそれをやった方法です。フラグメント化するためのリトランラビューが動作しません

リサイクラーの項目のレイアウト

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/iv_cover" 
     android:layout_width="match_parent" 
     android:layout_height="150dp" 
     android:scaleType="centerCrop" 
     android:transitionName="cover" 
     android:src="@drawable/ic_check_circle" /> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="150dp" 
     android:background="#30000000" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="150dp"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_above="@id/tv_title" 
      android:layout_marginBottom="5dp" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:background="@color/colorPrimary" 
      android:paddingLeft="5dp" 
      android:paddingRight="5dp" 
      android:text="BBC" 
      android:textAppearance="@style/Base.TextAppearance.AppCompat.Caption" 
      android:textColor="#fff" 
      android:textSize="16dp" /> 

     <TextView 
      android:id="@id/tv_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_marginBottom="10dp" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:background="@color/colorPrimary" 
      android:maxLines="3" 
      android:paddingLeft="5dp" 
      android:paddingRight="5dp" 
      android:text="NEWS TITLE" 
      android:textAppearance="@style/TextAppearance.AppCompat.Caption" 
      android:textColor="#fff" 
      android:textSize="20sp" /> 
    </RelativeLayout> 
</RelativeLayout> 

フラグメントレイアウトここ

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/iv_cover" 
     android:transitionName="cover" 
     android:layout_width="match_parent" 
     android:layout_height="200dp" 
     android:scaleType="centerCrop" /> 

    <TextView 
     android:id="@+id/tv_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/tv_description" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/btn_story" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Read Full Story" 
     android:layout_gravity="center"/> 
</LinearLayout> 

は、私がここで

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      //ImageView ivCover = (ImageView) getActivity().findViewById(R.id.iv_cover); 
      getActivity().getSupportFragmentManager() 
        .beginTransaction() 
        .replace(android.R.id.content, feedFragment, "Feed") 
        .addSharedElement(cover, "cover") 
        .addToBackStack("Feed") 
        .commit(); 
     } 

を使用するJavaコードがFragmentコード

ですここ

は私が間違って何をやっているスタイル

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:windowContentTransitions">true</item> 
</style> 

のですか?ここで私を案内してください。おかげで、あなたのonBindViewHolderで

答えて

0

は、次の行を追加します。

holder.ivCover.setTransitionName("trans_image" + position); 

を各共有要素は、一意の遷移の名前を持つ必要があります。

ので、代わりの.addSharedElement(cover, "cover")

書き込み.addSharedElement(cover, imageTransitionName)

imageTransitionName = rv_imageView.getTransitionName(); 

と、実装に依存する(onClickListenerではなくgetActivity()view.findViewById()が必要になります。...)、

ImageView rv_imageView =(ImageView) getActivity().findViewById(R.id.iv_cover);

また、fadeまたはslide_rightまたは独自のカスタムトランジションを試すこともできます。

アイテムと新しい詳細なフラグメントをクリックしたときに、このすべてのシナリオで動作しますが(例えば)

だからあなたがバンドルにimageTransitionNameを送って...と細部でその引数を取得する必要があります表示されます断片のように

String imageTransitionName = bundle.getString("TRANS_NAME"); 
view.findViewById(R.id.iv_cover).setTransitionName(imageTransitionName); 
+0

私は戻ってボタンを押すとうまくいきます。私はフラグメントを開いたときと同じようにアニメーション化されません。私はバックプレスでアニメーションはありませんが、私は開始時に起こったことの予備をしたいと思います。 –

+0

リターンバックアニメーションは、recyclerview-v7:25.1.1では動作しません。だから、それを抱いたり、Googleによって修正されるまで待ってください。もう1つの行を追加して試してみてください。setSharedElementReturnTransition ... –

+0

それが価値があったら、答えを受け入れて名誉を尽くしてください。 –

関連する問題