2016-07-07 21 views
6

グローバルアプリケーションにフィードデータのリストがあります。 私はそれが仕事をしてMainAcitivty終了アクティビティのカスタム共有要素の遷移

// selected item event 
Intent intent = new Intent(this, DetailActivity.class); 
intent.putExtra("item_feed_index", selectedItemIndex); 
FeedViewHolder viewHolder = getViewHolderFromPosition(position); 
Pair<View, String> pair1 = Pair.create(viewHolder.imageView, "TransitionName.Feed.Image"); 
Pair<View, String> pair2 = Pair.create(viewHolder.textView, "TransitionName.Feed.Text"); 
Pair<View, String> pair3 = Pair.create(viewHolder.button, "TransitionName.Feed.Button"); 
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3); 
startActivity(intent, options.toBundle()); 

に私のRecyclerViewからの移行をするためにこのコードを使用していました。しかし、問題は、DetailActivityでは、ユーザーがスクロールしてリスト内のフィード項目(スクロールインデックスも変更する)を変更できる別の垂直リストがあることです。

ときにバックDetailActivityからのプレスは、私が出口アニメーション遷移が正しい視聴フィードインデックス上で実行します。どうやってやるの?

MainActivityのコードonActivityResultです。リサイクルを正しい位置にスクロールしますが、終了トランジションのアニメーションは正しい位置ではありません。

int currentFeedIndex = Application.getInstance().getCurrentViewingFeed(); 
if (currentFeedIndex > 0 && currentFeedIndex < adapter.getItemCount()) { 
    if (gridLayoutManager != null) { 
     gridLayoutManager.scrollToPositionWithOffset(currentFeedIndex + 1, 0); 
    } 
} 

私は、終了アニメーションを実行する前に、ペアのリストを変更する方法を探しています

更新:ここで私は、ビューへの移行名を割り当てるDetailActivityのレイアウトがある

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/imgFeed" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:transitionName="TransitionName.Feed.Image" /> 

    <TextView 
     android:id="@+id/tvLogo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:transitionName="TransitionName.Feed.Text"/> 

    <Button 
     android:transitionName="TransitionName.Feed.Button" 
     android:id="@+id/btn" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="40dp" 
     android:layout_below="@+id/tvLogo"/> 
    </RelativeLayout> 
発信者活動に
+1

'DetailActivity'のビューに対する名前?私はあなたがDetailActivity' 'へMainActivity''からpoint.Enterアニメーションを取得しないコード – rom4ek

+0

は、これらの遷移名で正しいです。しかし、 'DetailActivity'には、別のアイテム(itemIdを変更する)に切り替えるためのビューページがあります。私がしたいのは、 'DetailActivity'から' MainActivity'に戻るときにexitアニメーションのために新しいitemIdを更新することです。 – R4j

答えて

2

String itemId; //set your item id here 

Intent intent = new Intent(this, DetailActivity.class); 
intent.putExtra("item_feed_index", selectedItemIndex); 
intent.putExtra("item_id", itemId); 

String imageViewTransitionName = "TransitionName.Feed.Image." + itemId; 
String textViewTransitionName = "TransitionName.Feed.Text." + itemId; 
String buttonTransitionName = "TransitionName.Feed.Button." + itemId; 

ViewCompat.setTransitionName(viewHolder.imageView, imageViewTransitionName); 
ViewCompat.setTransitionName(viewHolder.textView, textViewTransitionName); 
ViewCompat.setTransitionName(viewHolder.button, buttonTransitionName); 

Pair<View, String> pair1 = Pair.create(viewHolder.imageView, imageViewTransitionName); 
Pair<View, String> pair2 = Pair.create(viewHolder.textView, textViewTransitionName); 
Pair<View, String> pair3 = Pair.create(viewHolder.button, buttonTransitionName); 

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3); 
startActivity(intent, options.toBundle()); 

あなたの目的地でActivityの場合itemIdIntentから取得し、各ビューの正しい遷移名を設定するだけです。

String itemId = getIntent().getString("item_id"); 
String imageViewTransitionName = "TransitionName.Feed.Image." + itemId; 
String textViewTransitionName = "TransitionName.Feed.Text." + itemId; 
String buttonTransitionName = "TransitionName.Feed.Button." + itemId; 

ViewCompat.setTransitionName(findViewById(R.id.imageView), imageViewTransitionName); 
ViewCompat.setTransitionName(findViewById(R.id.textView), textViewTransitionName); 
ViewCompat.setTransitionName(findViewById(R.id.button), buttonTransitionName); 
+0

を更新rom4ek @ – R4j

+1

@ R4j多分、あなたの問題を説明する小さなビデオを投稿することができます。 – rom4ek

1
は、このようなあなたのDetailActivityに onBackPressedメソッドをオーバーライドし

@Override 
public void onBackPressed() { 
    supportFinishAfterTransition(); 
    super.onBackPressed(); 
} 

をまた、確認してくださいにあなたが出口の移行を指定しているあなたのstyles.xmlあなたが移行を割り当てなかったかのコードを投稿できる

関連する問題